【发布时间】:2011-05-06 13:26:23
【问题描述】:
感谢+ (BOOL)needsDisplayForKey:(NSString *)key 和CABasicAnimations,到目前为止,我已经能够为我的 CALayer 子类的自定义属性设置动画。
然而事实证明,链接动画会变得非常棘手,因为所有代码都发生在一个 animationDidStop:finished: 方法中。
所以我想切换到CATransactions,因为它们支持新的块语法,这将允许我使用+ (void)setCompletionBlock:(void (^)(void))block 指定一个完成块。
但在我看来,CATransaction 只能为所谓的“可动画属性”设置动画,并且它不适用于我的自定义图层属性,即使实现了 needsDisplayForKey: 方法也是如此。
那么有没有办法让CALayer 中的自定义属性与CATransaction 一起动画?
编辑: 我的意图是做一些类似的事情:
[CATransaction begin];
[CATransaction setAnimationDuration:0.5];
[CATransaction setAnimationTimingFunction:[CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut]];
[CATransaction setCompletionBlock:^{
NSLog(@"blabla");
}];
myLayer.myProperty = newValue;
[CATransaction commit];
myProperty 值更新为newValue 没有动画。我试图实施
actionForLayer:forKey: 在管理 myLayer 的视图中返回 CABasicAnimation。但是actionForLayer:forKey: 永远不会使用密钥myProperty 调用。是的,myLayer 不是view.layer 而是一个子层,是的,我将myLayer 的委托设置为包含视图。
【问题讨论】:
标签: iphone properties core-animation catransaction