Ios 获取自定义类中的动画持续时间
我试图在自定义类中创建一个动画,该类将在动画块中触发,就像所有UIView元素一样 我的班级: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
@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继承,但行为非常相似。动画实际上是如何工作的?这是某种形式的
演示吗麦莉
?我正在记录所有的更改(如帧更改),以便以后需要时可以重播