我正在尝试使用块动画翻转UIImageView。许多网站(以及此处的答案)都建议这样做:
flipTile.image = frontImage;
[UIView transitionWithView: flipTile
duration: 2.5f
options: UIViewAnimationOptionTransitionFlipFromLeft
animations:^(void) {
flipTile.image = backImage;
}
completion:^(BOOL finished) {
}
];
不幸的是,这并没有给我我期望的结果。动画的上半部分我什么也没得到,然后backImage变成动画的下半部分的外观。就像frontImage是隐藏的或透明的-事实并非如此。
过渡中的某些事情使事情变得混乱了。我究竟做错了什么?
最佳答案
这是解决方案,如果将来其他任何人都可能遇到此问题:
简而言之,动画块在UIImageView
的当前状态和animations
部分中设置的状态之间切换。但是,由于在调用动画块之前设置了flipTile
的图像,因此iOS渲染引擎没有机会在动画开始之前更新我的UIImageView
。因此,我看到了一个从UIImageView
(nil
)当前状态到新状态(backImage
)的动画。
为了解决该问题,我需要将控制权返回给iOS一秒钟,以允许渲染引擎开展业务,然后执行动画。
这是我的操作方式:
- (void)giveHint {
/*
other work here
*/
flipTile.image = currentTileImage;
[self performSelector:@selector(flipTile) withObject:nil afterDelay: 0.1];
}
- (void)flipTile {
[UIView transitionWithView: flipTile
duration: 0.5
options: UIViewAnimationOptionTransitionFlipFromLeft
animations:^{
flipTile.image = newTileImage;
}
completion:^(BOOL finished) {
/*
clean up
*/
}
];
}
关于ios - 使用 block 翻转UIImageView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14675285/