动画CALayer子类的自定义属性
我有一个CALayer子类MyLayer,它有一个名为myInt的NSInteger属性。 我真的很想通过CABasicAnimation来动画这个属性,但是看起来CABasicAnimation只能用于所谓的“动画”属性(边界,位置等)。 有什么我可以重写,使我的自定义myInt属性动画?
是的,这是可能的(只有在最新的Core Animation版本中,我相信,即iPhone 3.0+和OS X 10.6+)。
使您的资产充满活力,以便CA为您实施访问者:
@dynamic myInt;
告诉图层该属性的更改需要重绘:
+ (BOOL)needsDisplayForKey:(NSString*)key {
if ([key isEqualToString:@"myInt"]) {
return YES;
} else {
return [super needsDisplayForKey:key];
}
}
在drawInContext:
方法中使用myInt
的值。 现在,当您为myInt
设置动画myInt
,Core Animation将插入动画每一步的值,并重复要求图层自行绘制。
如果您还想为此属性启用隐式动画,还可以覆盖actionForKey:
有一种方法可以保留自定义CALayer子类的iVars。 您重写initWithLayer:,该方法被调用来创建自定义图层的副本。 例如,如果您有一个要在其中创建名为'angle'的自定义属性的图层,则可以使用以下代码:
@implementation AngledLayer
@synthesize angle = _angle
// Tell Core Animation that this key should be animated
+ (BOOL) needsDisplayForKey:(NSString *)key
{
if ([key isEqualToString:@"angle"]) return YES;
return [super needsDisplayForKey:key];
}
// Make sure that, when the layer is copied, so is the custom ivar
- (id) initWithLayer:(id)layer
{
self = [super initWithLayer:layer];
if (self) {
AngledLayer *angledVersion = (AngledLayer *)layer;
self.angle = angledVersion.angle;
}
return self;
}
鲍勃是你的叔叔! 请注意,您不能将此对象与隐式动画一起使用,您也必须覆盖actionForKey:方法。
链接地址: http://www.djcxy.com/p/74163.html