我正在测试我的应用程序以发布IOS 8.我注意到在执行动画块之后,如果我更新任何标签的文本,动画将重置。我用一个如下所示的方法运行了一个简单的例子。运行此示例将导致以下结果:
myButton
- 动画运行,但在更改标签文字时重置。myButton
- 动画运行但未重置为原始位置。 这似乎是因为标签文本没有改变。如果我完全删除了更新文本的行,这也会阻止动画在结束时重置。
我想修复此问题,以便在方法运行时,可以更新标签文本而无需重置动画。
- (IBAction)move:(id)sender {
[UIView animateWithDuration:0.4 delay:0.0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.myButton.center = CGPointMake(200, 300);
}completion:^(BOOL finished){
if(finished){
self.myLabel.text=@"moved";
}
}];
}
答案 0 :(得分:18)
在UIView上设置自动布局可能会导致此问题。严格来说,如果您使用自动布局,那么您不应该为对象的绝对位置设置动画 - 您应该为其约束设置动画。
动画播放后更改标签文本会触发布局刷新,iOS会随机播放所有内容以符合原始视图约束。 (我怀疑这是iOS7的行为改变)。
快速修复:取消查看视图上的自动布局,这应该可以正常工作。
答案 1 :(得分:1)
试试这个。将所需的动画也放在完成块中。
- (IBAction)move:(id)sender {
[UIView animateWithDuration:0.4 delay:0.0
options:UIViewAnimationOptionBeginFromCurrentState
animations:^{
self.myButton.center = CGPointMake(200, 300);
}completion:^(BOOL finished){
if(finished){
self.myLabel.text=@"moved";
self.myButton.center = CGPointMake(200, 300);
}
}];
}