1

我正在尝试在此处遵循有关 iOS 粒子系统的教程:http ://www.raywenderlich.com/6063/uikit-particle-systems-in-ios-5-tutorial

我无法将self.canvas.layerC4Workspace.m 中的内容转换为CAEmitterLayer. 代码编译得很好,但在运行时失败。

我试过这个:

    particlesystem = (CAEmitterLayer *)self.canvas.layer;

但我每次都收到这个错误。

-[C4Layer setEmitterPosition:]: unrecognized selector sent to instance 0xa183830

看来我没有正确地投射或暴露方法。我该怎么做?

4

1 回答 1

2

您不能简单地将一层转换为另一层。为了让视图具有非标准层,您需要对其进行子类化并定义+layerClass方法:

@implementation MyViewSubclass

+ (Class)layerClass {
    return [CAEmitterLayer class];
}

...

不幸的是,对于您的情况,您正在使用的视图已经设置了一个自定义层,C4Layer可以在 GitHub 上看到。这一层做了很多,你不想尝试替换它。

您可以做的是将您自己的子图层插入到您的画布中:

CAEmitterLayer *myLayer = [CAEmitterLayer layer];
myLayer.frame = self.canvas.bounds;
[self.canvas.layer addSublayer:myLayer];

这个发射器层现在将覆盖您的层,您可以添加任何您想要的效果。如果您希望发射器低于其他层,您可以使用insertSublayer:myLayer atIndex:0.

于 2013-12-06T23:01:14.390 回答