我正在使用动画移动一些平铺(UIlabels)。这有效,但我也希望瓷砖在动画完成时返回到原始位置。我得到了非常多样的结果。有时候它的效果很好,但是当局似乎在动画重置他们的位置。以下是我的代码示例。
[UIView animateWithDuration:animationLength animations:^{
for (int c = 0; c<tilesToMove.count; c++) {
animationMoving = true;
NSInteger fromTile = [tilesToMove[c][0] integerValue];
NSInteger toTile = [tilesToMove[c][1] integerValue];
UILabel *toTile = (UILabel *)[self.view viewWithTag:toTile];
UILabel *fromLabel = (UILabel *)[self.view viewWithTag:fromTile];
fromLabel.frame = CGRectMake(toTile.frame.origin.x, toTile.frame.origin.y, fromLabel.frame.size.width,fromLabel.frame.size.height);
}
}
completion:^(BOOL finished){
if (finished) {
for (int c = 0; c<tilesToMove.count; c++) {
NSInteger fromTile = [tilesToMove[c][0] integerValue];
NSInteger toTile = [tilesToMove[c][1] integerValue];
UILabel *button = (UILabel *)[self.view viewWithTag:fromTile+100000];
UILabel *fromLabel = (UILabel *)[self.view viewWithTag:fromTile];
fromLabel.frame = CGRectMake(button.frame.origin.x, button.frame.origin.y, fromLabel.frame.size.width,fromLabel.frame.size.height);
}
[self animateMoveCompleted:moveDirection];
}
}];
它查找我想要在数组中移动的每个tile的标记,称为tilesToMove。这也保存了我希望第一个瓷砖移动到的瓷砖标签(动画到相同的位置)。完成后,我希望它重置到原始位置。这总是有效,但有时,它会动画过渡。这不是我的意图。我只想动画第一个动作(按预期工作),而不是重置位置(重置到正确的位置,但动画)。
动画的完成是否有效?
答案 0 :(得分:1)
&#34;动画的完成是否具有动画效果&#34;完成块没有做任何事情。
这是一个代码块,将在动画完成时执行。
如果该块内的代码启动另一个动画,那么它将动画。
因为您调用了名为animate...
的方法,所以这就是问题所在。您需要运行一个不会对属性进行动画处理的方法。如果你不想为它们设置动画,它应该设置它们。
<强> HINT 强>
如果您不想让它动画,您可以使用timeDuration
为0。