当UIImage的改变动画扣回(Animation Snaps back when the UIIm

2019-08-16 22:46发布

我有,当按下按钮并保持在屏幕上运行的的UIImageView。 当按下按钮是改变的UIImageView的UIImage的,当按钮被放过我将其更改为原来的UIImage。 当曾经的图像变回它弹回的图像开始的位置。

当按下按钮,该计时器被称为:

//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];

这就是所谓的在正在举行的按钮停止:

- (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"];
}

我需要的图像添加到动画的变化? 如果是的话怎么样? 我真的糊涂。

Answer 1:

核心动画使用不同组的属性来表示对象:

从核心动画编程指南 :


模型层树 (或简称为“层树”)是您的应用程序最互动的人。 在这棵树的对象是存储目标值任何动画模型对象。 无论何时更改图层的属性,你可以使用这些对象之一。

表示树包含任何正在运行的动画在飞行中值。 而层树对象包含了动画中的目标值,在呈现树中的对象,因为他们出现在屏幕上反映当前值。 你不应该修改此树中的对象。 相反,你使用这些对象来读取当前动画值,也许是为了创建开始在这些值的新动画。


所以,当你动画的属性更改表现层,但一旦动画完成的对象恢复到它的模型属性值。

你需要做的,解决这个问题有什么用[CAAnimation animationDidStop:finished:]委托方法来设定最终的属性值和其他任何你想这样做。 我认为你可以用它来转储可怕NSTimer您正在使用的代码和世界一个小部分会好得多。



文章来源: Animation Snaps back when the UIImage is changed