自定义动画属性返回NSNull?

Jam*_*ils 6 core-animation objective-c uikit uiview ios

只有一天的赏金!

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

我一直在为自定义上的自定义动画属性创建自己的隐式动画CALayer.

我已经设置了自定义的后备层,UIView并且可以使用a CATransaction来为自定义属性设置动画(在自定义示例中,我正在使用自定义属性更改圆的颜色circleColor).

我知道UIView通过NSNullactionForLayer:forKey: selector方法返回来关闭可动画属性UIView.然后当属性被包裹在UIView animateWithDuration块中时,UIView将返回动画.

所以这将使用backgroundColor,不透明等.但是,我的自定义属性circleColor仍然返回NSNull.

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

Jam*_*ils 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;
}
Run Code Online (Sandbox Code Playgroud)

该代码允许您在 UIView 块内设置动画,但它无法检测到它位于 UIView 块内。因此,如果您使用此代码,那么它甚至会在 UIView 块之外进行动画处理,从而达不到目的。我将监视其他人的响应,但似乎唯一的选择是制作您自己的自定义 UIView 动画块系统,该系统将允许您添加自定义可动画属性。我认为 Facebook 的 Pop 框架将是一个很好的替代解决方案。