小编Tak*_*ano的帖子

如何将CALayer设置为SCNMaterial的内容

我是SceneKit的新手.我正在尝试设置一个纹理,该视图由a上的代码绘制SCNSphere.自定义视图如下所示:

class CustomView : UIView {
    override func drawRect(rect: CGRect) {
        let ctx = UIGraphicsGetCurrentContext()
        let centerX = self.bounds.width / 2
        let centerY = self.bounds.height / 2

        // fill background
        CGContextSetFillColorWithColor(ctx, UIColor.whiteColor().CGColor)
        CGContextFillRect(ctx, self.layer.frame)

        // draw axises
        CGContextSetLineWidth(ctx, 1)
        CGContextSetStrokeColorWithColor(ctx, UIColor.blackColor().CGColor)

        CGContextMoveToPoint(ctx, 0, centerY)
        CGContextAddLineToPoint(ctx, self.bounds.width, centerY)
        CGContextStrokePath(ctx)

        CGContextMoveToPoint(ctx, centerX, 0)
        CGContextAddLineToPoint(ctx, centerX, self.bounds.height)
        CGContextStrokePath(ctx)
    }
}
Run Code Online (Sandbox Code Playgroud)

该视图如下所示: 在此输入图像描述

要将此视图设置为a的纹理SCNSphere,我将其取出并将layer其设置contentsfirstMaterial.

class MyViewController: UIViewController {
    override func viewDidLoad() {
        super.viewDidLoad()

        let sceneView …
Run Code Online (Sandbox Code Playgroud)

calayer ios scenekit

8
推荐指数
0
解决办法
1156
查看次数

如何覆盖Objective-C中的可变方法

我正在尝试扩展一个具有可变方法的类,例如:

- (void)someMethod:(id)arguments, ... ;
Run Code Online (Sandbox Code Playgroud)

并在子类中通过调用原始方法覆盖它,如:

- (void)someMethod:(id)arguments, ... {
    [super someMethod:arguments, ...];

    // override implementation
    ...
}
Run Code Online (Sandbox Code Playgroud)

但这不起作用.有谁知道如何工作?谢谢.

objective-c variadic variadic-functions

5
推荐指数
1
解决办法
605
查看次数

如何在 OpenCV 中打印矢量值

我是 OpenCV 的新手。请告诉我如何使用std::cout.

std::vector<std::vector<cv::Point>> contours;  
std::vector<cv::Vec4i> hierarchy;
Run Code Online (Sandbox Code Playgroud)

c++ opencv

5
推荐指数
1
解决办法
5463
查看次数

objective-c对象是否都是相同类型的C结构?

我想知道语言的面向对象特性是如何在C中实现的.

如定义中<objc/runtime.h>,idtype是指向a的指针objc_object,objc_objecttype是C结构,只有一个成员isa存储a Class.那么存储任何对象的实例变量的实际值的位置和方式是什么?

还有一件事,所有Objective-C对象指针都可以被转换为id(这是一个指向C结构的指针,其中不存在继承等特性),Objective-C类只是编译器的限定符,并且所有实例同样类型objc_object

添加:

NSObject *obj = [NSObject new];
objc_object *objStruct = (__bridge objc_object *)obj;
NSLog(@"obj: %@", NSStringFromClass(objStruct->isa));

NSString *str = [NSString new];
objc_object *strStruct = (__bridge objc_object *)str;
NSLog(@"str: %@", NSStringFromClass(strStruct->isa));
Run Code Online (Sandbox Code Playgroud)

此代码编译并输出:

obj: NSObject, str: __NSCFConstantString
Run Code Online (Sandbox Code Playgroud)

objstr可浇铸objc_object *的,这意味着这两个变量是相同类型的指针,没有?

解决

明白!我误解了指针投射是如何工作的.obj并且str是不同结构类型的指针,但两者通常isa在内存前面都有类型成员,因此可以视为一个objc_object.下面的代码模仿了这个机制:

typedef struct {
    int isa;
} Fake_NSObject;

typedef struct …
Run Code Online (Sandbox Code Playgroud)

runtime objective-c

4
推荐指数
1
解决办法
1145
查看次数