自定义动画属性返回NSNull?

时间:2014-07-29 13:10:02

标签: ios objective-c uiview uikit core-animation

赏金只剩下一天了!

您是否可以使用UIView animateWithDuration块语法使用自定义动画属性?

我一直致力于为自定义CALayer上的自定义动画属性创建自己的隐式动画。

我设置了自定义UIView的支持图层,可以使用CATransaction为自定义属性设置动画(在自定义示例中,我正在使用自定义属性更改圆圈的颜色{{ 1}})。

我知道circleColor通过UIView上的NSNull方法返回actionForLayer:forKey: selector来关闭可动画的属性。然后,当该属性包含在UIView中时,UIView animateWithDuration将返回动画

因此,这适用于UIView,不透明度等。但是,我的自定义属性backgroundColor仍会返回circleColor

我希望我为这个问题提供了足够的背景信息。谢谢!

2 个答案:

答案 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:^{ }];