【问题标题】:Method sent to CAEmitterLayer but goes to CALayer方法发送到 CAEmitterLayer 但转到 CALayer
【发布时间】:2013-08-18 13:45:52
【问题描述】:

我设置了一个 CAEmitterLayer,它运行良好:

-(void)awakeFromNib
{
    //set ref to the layer
    emitter = (CAEmitterLayer*)self.layer;
    emitter.emitterPosition = CGPointMake(160, 270);

    CAEmitterCell* grassLeft = [self getEmitter];
    CAEmitterCell* grassRight = [self getEmitter];
    grassLeft.emissionLongitude = M_PI*1.20;
    grassRight.emissionLongitude = M_PI*1.80;

    //add the cell to the layer and we're done
    emitter.emitterCells = [NSArray arrayWithObjects:grassLeft,grassRight,nil];


}

但是我加了一行代码:

-(void)awakeFromNib {
    //set ref to the layer
    emitter = (CAEmitterLayer*)self.layer;
    emitter.emitterPosition = CGPointMake(160, 270);
    emitter.backgroundColor = [[UIColor redColor] CGColor];

    CAEmitterCell* grassLeft = [self getEmitter];
    CAEmitterCell* grassRight = [self getEmitter];
    grassLeft.emissionLongitude = M_PI*1.20;
    grassRight.emissionLongitude = M_PI*1.80;

    //add the cell to the layer and we're done
    emitter.emitterCells = [NSArray arrayWithObjects:grassLeft,grassRight,nil];


}

突然间,我收到了Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[CALayer setEmitterPosition:]: unrecognized selector sent to instance 0x7546390'。调试窗口显示该对象是 CAEmitterLayer,而不仅仅是 CALayer。而当我删除那行代码时,问题依然存在。

【问题讨论】:

  • 你真的把self.layer设置成发射层了吗?我看起来你只是在投射。

标签: iphone objective-c calayer caemitterlayer


【解决方案1】:

我假设此代码在自定义 UIView 中,如果是这样,请确保您已覆盖:

+ (Class)layerClass

应该是这样的:

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

这将确保在你的 UIView 中你有

emitter = (CAEmitterLayer*)self.layer;

它返回一个 CAEmitterLayer,而不是默认情况下的普通 CALayer。

我猜这是问题所在,因为错误表明您正在尝试调用仅存在于普通 CALayer 上的 CAEmitterLayer 上的方法。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-08
    • 1970-01-01
    • 2010-12-04
    • 2015-10-19
    • 1970-01-01
    • 2012-01-14
    相关资源
    最近更新 更多