赏金只剩下一天了!
您是否可以使用UIView
animateWithDuration块语法使用自定义动画属性?
我一直致力于为自定义CALayer
上的自定义动画属性创建自己的隐式动画。
我设置了自定义UIView
的支持图层,可以使用CATransaction
为自定义属性设置动画(在自定义示例中,我正在使用自定义属性更改圆圈的颜色{{ 1}})。
我知道circleColor
通过UIView
上的NSNull
方法返回actionForLayer:forKey: selector
来关闭可动画的属性。然后,当该属性包含在UIView
块中时,UIView animateWithDuration
将返回动画。
因此,这适用于UIView
,不透明度等。但是,我的自定义属性backgroundColor
仍会返回circleColor
。
我希望我为这个问题提供了足够的背景信息。谢谢!
答案 0 :(得分:0)
所以这个问题已经开放了很长时间,我得出结论认为这是不可能的。下面的代码显示了如何在块中打开要检测的自定义属性。在UIView中重写了这个方法。
- (id<CAAction>)actionForLayer:(CALayer *)layer forKey:(NSString *)event {
NSLog(@"%s - event: %@", __PRETTY_FUNCTION__, event);
id<CAAction> action = [super actionForLayer:layer forKey:event];
if ([event isEqualToString:@"circleColor"] && (nil == action || (id)[NSNull null] == action)) {
return [CABasicAnimation animationWithKeyPath:event];
}
return action;
}
代码允许您在UIView块中设置动画,但是它无法检测到它是否在UIView块中。因此,如果你使用这个代码,那么它甚至会在UIView块之外制作动画,这会破坏目的。我会监视其他人的回复,但看起来唯一的选择就是制作自己的自定义UIView动画块系统,它允许您添加自定义的可动画属性。我认为Facebook的Pop框架将是一个很好的替代解决方案。
答案 1 :(得分:-1)
尝试使用[UIView animateWithDuration:0.5 animations:^{ }];