animation在UIImage更改时快照
当按下button时,我有一个UIImageView在屏幕上运行。 当button被按下时,改变UIImageView的UIImage,当button被释放时,我将其更改为其原始的UIImage。 当图像变回时,它会回到图像开始的位置。
该button被按下时调用该定时器:
//This is the image that changes when the button is pressed. imView.image = image2; runTimer = [NSTimer scheduledTimerWithTimeInterval:0.04 target:self selector:@selector(perform) userInfo:nil repeats:YES];
这被称为当button停止时:
- (IBAction)stopPerform:(id)sender{ [runTimer invalidate]; //THIS IS WHAT SNAPS THE ANIMATION BACK: //Without this the animation does not snap back imView.image = image1; } - (void)performRight{ CGPoint point0 = imView.layer.position; CGPoint point1 = { point0.x + 4, point0.y }; CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"position.x"]; anim.fromValue = @(point0.x); anim.toValue = @(point1.x); anim.duration = 0.2f; anim.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn]; // First we update the model layer's property. imView.layer.position = point1; // Now we attach the animation. [imView.layer addAnimation:anim forKey:@"position.x"]; }
我是否需要将图像中的更改添加到animation中? 如果这样怎么样? 我真的很困惑。
Core Animation使用不同的属性集来表示一个对象:
从核心animation编程指南 :
模型图层树 (或简称为“图层树”)是您的应用程序与其交互最多的图层树。 此树中的对象是存储任何animation的目标值的模型对象。 每当更改图层的属性时,都使用这些对象之一。
表示树包含任何正在运行的animation的正在进行的值。 尽pipe图层树对象包含animation的目标值,但是呈现树中的对象反映了屏幕上显示的当前值。 你不应该修改这个树中的对象。 而是使用这些对象来读取当前的animation值,也许从这些值开始创build一个新的animation。
所以当你改变属性的animation时,你改变了表示层,但是一旦animation完成,对象就会回到它的模型属性值。
你需要做什么来解决这个问题是使用[CAAnimation animationDidStop:finished:]
委托方法来设置最终的属性值和任何你想做的事情。 我想你可以用它来转储你正在使用的那个可怕的NSTimer
代码,世界上的一小部分将会好得多。