Ios 获取自定义类中的动画持续时间

Ios 获取自定义类中的动画持续时间,ios,ios7,core-animation,objective-c-blocks,uiviewanimation,Ios,Ios7,Core Animation,Objective C Blocks,Uiviewanimation,我试图在自定义类中创建一个动画,该类将在动画块中触发,就像所有UIView元素一样 我的班级: @interface SmileyFace : NSObject @property (strong, nonatomic) uicolor* color; @end 我正在使用以下选项更改颜色: [UIView animateWithDuration:3 animations:^{ myView.frame = newFrame; smileyVie

我试图在自定义类中创建一个动画,该类将在动画块中触发,就像所有UIView元素一样

我的班级:

@interface SmileyFace : NSObject
@property (strong, nonatomic) uicolor* color;
@end
我正在使用以下选项更改颜色:

[UIView animateWithDuration:3 animations:^{
            myView.frame = newFrame;
            smileyView.color = [uicolor redcolor];
        }];
现在,在属性颜色的setter中, 我需要确定是否应该设置动画,并添加自定义动画:

-(void)setColor:(UIColor *)color
{
    _color = color;
    NSLog(@"new frame");
    if ([CATransaction animationDuration] > 0)
        [self changeColor:color withAnimationWithDuration:[CATransaction animationDuration]];
    else
        [self changeColor:color];
}
因为我的对象是自定义对象,所以我不确定如何访问动画的持续时间。 从CAtransaction,我总是得到0.25的持续时间


任何帮助都将不胜感激

您将无法从事务中获取持续时间,因为视图没有使用事务来制作动画,而是使用
actionForLayer:forKey
delegate方法向层提供动画。这显然不适用于您,因为您的自定义对象不是视图

您可以向视图请求其他类似属性(如backgroundColor)的操作,以查看它是否返回
CAAnimation
,在这种情况下,您可以从中读取持续时间,或者如果它返回
NSNull
,则不应设置动画。虽然这会起作用,但我认为这是一个丑陋且令人讨厌的解决方案。(我甚至不打算向您展示代码,因为我不想鼓励人们在没有完全理解它的情况下这样做(即,能够自己编写代码))

因为你的笑脸甚至不是一个视图(我不知道你为什么要对一个甚至不是视图的东西设置动画),我认为公开
setColor:duration:
方法是一个更干净的解决方案,如果持续时间大于0,可以使用该方法触发动画

CGFloat duration = 3.0;
[UIView animateWithDuration: duration animations:^{
     myView.frame = newFrame;
     [smileyView setColor:[UIColor redColor] duration:duration];
}];

为什么SmileyFace不从UIView继承?因为它实际上不是一个视图,而是一种通信机制,它不能从UIView继承,但行为非常相似。动画实际上是如何工作的?这是某种形式的
演示吗麦莉
?我正在记录所有的更改(如帧更改),以便以后需要时可以重播