我有一个名为myInt的NSInteger属性的CALayer子类MyLayer。我真的很想通过CABasicAnimation来动画这个属性,但是看起来CABasicAnimation只能用于所谓的“动画”属性(边界,位置等)。有什么我可以重写,使我的自定义myInt属性动画?动画CALayer子类的自定义属性
回答
是的,这是可能的(只有在最新的核心动画发布,但我相信,即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]; } }
使用值
myInt
在您的drawInContext:
方法中。现在,当您制作动画myInt
时,Core Animation将为动画的每个步骤插值,并重复要求图层自行绘制。如果您还想为此属性启用隐式动画,还可覆盖
actionForKey:
。
谢谢!这让我非常接近我可以品尝到的解决方案! -drawInContext:使用myInt正确插值多次调用。不幸的是CGContextDrawImage()在动画运行时不再起作用。我填充的Rects或笔画都是正确绘制的,但通常由CGContextDrawImage()绘制的图像会消失,直到动画结束,就像从不调用CGContextDrawImage()一样。我很困惑。有什么想法吗? – jemmons 2010-03-07 23:52:05
不知道,对不起。我希望你找到一个解决方案。 – 2010-03-08 00:09:05
没关系。您的回复仍然是我在Stack Overflow上看到的最好的书面答案之一:) – jemmons 2010-03-08 00:37:49
有是保留您的自定义CALayer的子类的实例变量的方法。您重写initWithLayer:,该方法被调用来创建自定义图层的副本。例如,如果您有要在其中创建一个名为“角度”的自定义属性层,你可以使用下面的代码:
@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:方法。
这不适合我。在'initWithLayer'里面,即使在动画时,图层也始终具有属性的起始值。二传手被称为别的地方。 – zakdances 2013-04-26 11:56:44
我看到和你的朋友一样。虽然initWithLayer和needsDisplayForkey的组合允许动画发生,但一旦它结束,图层就会返回到其初始值。我仍在寻找解决方案。 – 2013-07-29 17:18:18
好吧,看起来我并没有意识到@dynamic会导致setter自动生成动画。但如果出于某种原因需要做更多的事情,您可能需要创建自己的具有自己的动画块的setter,以便在动画发生之前更改图层属性。见[link](http://stackoverflow.com/questions/11515647/objective-c-cabasicanimation-applying-changes-after-animation) – 2013-07-29 17:31:45
- 1. CALayer自定义属性动画与Xamarin
- 2. 动画自定义CALayer属性
- 3. 自定义CALayer动画
- 4. 在CALayer中为自定义属性设置动画
- 5. 动画CALayer的shadowPath属性
- 6. CALayer子类重复动画
- 7. 为什么动画自定义CALayer属性导致其他属性在动画过程中为零?
- 8. SceneKit中的自定义动画属性
- 9. 更改CALayer属性的动画时间
- 10. 观察CALayer动画属性更改
- 11. 集合类型自定义属性的动画
- 12. 如何将自定义动画属性添加到UIImageView的子类?
- 13. 自定义属性动画不能禁用动画
- 14. 子类化CALayer +隐式动画w/Swift3
- 15. 自定义动画类
- 16. 如何更换一个CALayer的自定义动画出现
- 17. 动态/自定义属性
- 18. Autofac不自动将属性自动接线到自定义类
- 19. CALayer的动画
- 20. ExpandableListView子的自定义动画
- 21. Windows窗体数据绑定DisplayMember自定义类的子属性
- 22. 自定义值的jQuery动画(不是CSS属性)
- 23. 我无法为WPF中的自定义属性设置动画
- 24. 如何进行动画的自定义图形组件属性
- 25. Swift类自定义类型属性
- 26. Magento的loadByAttribute自定义类别属性
- 27. php:自定义类型的属性
- 28. 自定义类的Spring @ Value属性
- 29. ILMerge和类上的自定义属性
- 30. 动画CALayer
试着让这个属性成为'float'吗? – kennytm 2010-03-07 06:23:32