我正在屏幕上移动UIImages,它们是卡片。当他们在屏幕上移动时,图像是通用卡背面。当他们降落在正确的位置时,他们应该保持在那个位置,但是他们会回到原来的位置。 playerCardOne
,playerCardTwo
和playerCardThree
的原始点分别为(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)
。如何锁定它们他们的新职位?
答案 0 :(得分:2)
如果您使用的是AutoLayout,则应该为约束设置动画而不是项目框架。
动画下的objc.io有一些相关信息。
基本上你修改了一个约束,然后在一段时间内重新布局。
[UIView animateWithDuration:1.0f animations:^{
[myView layoutIfNeeded];
}];
答案 1 :(得分:1)
如果您关闭autolayout
,则按钮应保持在新位置。原因是因为autolayout
将在更新视图时使用当前约束来计算位置。