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代码,世界上的一小部分将会好得多。