如何在动画后将UIImage保持在新的位置?

时间:2013-12-10 02:38:35

标签: ios animation uiimage

我正在屏幕上移动UIImages,它们是卡片。当他们在屏幕上移动时,图像是通用卡背面。当他们降落在正确的位置时,他们应该保持在那个位置,但是他们会回到原来的位置。 playerCardOneplayerCardTwoplayerCardThree的原始点分别为(60,28 , 90,28 , 120,28)

以下是代码:

[playerCardOne setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal];
[playerCardTwo setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal];
[playerCardThree setImage:[UIImage imageNamed: @"cardBack.png"] forState:UIControlStateNormal];

然后动画:

[UIView animateWithDuration:1.0f
                 animations:^(void){
                     playerCardOne.center = CGPointMake(120.0f, 28.0f);
                     playerCardTwo.center = CGPointMake(90.0f, 28.0f);
                     playerCardThree.center = CGPointMake(60.0f, 28.0f);
                         } 
                 completion:^(BOOL finished) { 
                     if (finished) {                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      
                         [playerCardOne setImage:[UIImage imageNamed:playerCardOneTitle] forState:UIControlStateNormal];
                         [playerCardTwo setImage:[UIImage imageNamed:playerCardTwoTitle] forState:UIControlStateNormal];
                         [playerCardThree setImage:[UIImage imageNamed:playerCardThreeTitle] forState:UIControlStateNormal];
                     }
   }];

当动画完成时,弹出前卡图像并返回其原始位置(即playerCardOne应该在(120.0, 28.0)但是还原为(60.0, 28.0)。如何锁定它们他们的新职位?

2 个答案:

答案 0 :(得分:2)

如果您使用的是AutoLayout,则应该为约束设置动画而不是项目框架。

动画下的objc.io有一些相关信息。

基本上你修改了一个约束,然后在一段时间内重新布局。

[UIView animateWithDuration:1.0f animations:^{
    [myView layoutIfNeeded];
}];

答案 1 :(得分:1)

如果您关闭autolayout,则按钮应保持在新位置。原因是因为autolayout将在更新视图时使用当前约束来计算位置。