检查 UIView 当前是不是正在制作动画
Posted
技术标签:
【中文标题】检查 UIView 当前是不是正在制作动画【英文标题】:Check if UIView is currently animating检查 UIView 当前是否正在制作动画 【发布时间】:2012-03-11 13:03:14 【问题描述】:我有两个动画正在运行;显示搜索栏和显示横幅。这两个动画都在调整相同视图的大小,如果它们同时运行(它们是),最新的动画将取消调整大小。有没有办法检查 UIView 当前是否正在动画,然后等待动画?
我很确定我没有使用 CAAnimations,因为 Cocoa 没有检测到此类。
收到广告时,此广告正在运行。不幸的是,这与 ShowSearch 的运行时间相同。
- (void)adViewDidReceiveAd:(GADBannerView *)bannerView
if (!hasloaded)
[UIView beginAnimations:nil context:nil];
[UIView setAnimationCurve: UIViewAnimationCurveEaseInOut];
[UIView setAnimationDuration: 1.0];
[bannerView_ setFrame:CGRectMake(0, self.view.frame.size.height, bannerView_.frame.size.width, bannerView_.frame.size.height)];
// move and grow
[bannerView_ setFrame:CGRectMake(0, self.view.frame.size.height-50, bannerView_.frame.size.width, bannerView_.frame.size.height)];
// set original position
[UIT setFrame:CGRectMake(UIT.frame.origin.x, UIT.frame.origin.y, UIT.frame.size.width, UIT.frame.size.height)];
// move and grow
[UIT setFrame:CGRectMake(UIT.frame.origin.x, UIT.frame.origin.y, UIT.frame.size.width, UIT.frame.size.height-50)];
[UIView commitAnimations];
hasloaded = true;
【问题讨论】:
用- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)
运行它
【参考方案1】:
您可以使用UIView
方法+animateWithDuration:animations:completion:
中的完成块(这是beginAnimations
/commitAnimations
的更现代替代方法)链接多个动画(我猜这就是您想要做的?)。
【讨论】:
不,更像是在等待另一个动画完成,使用类似while(UIView.isAnimating == YES) //WAIT
的代码
所以您想在动画运行时什么都不做,而在动画完成时开始做某事?为什么不使用完成块?我真的看不出有什么区别。
我不知道它存在。【参考方案2】:
如果您在输入代码时选择代码并按control + K,您将保留格式并使其美观。尝试一下。将粘贴代码的文字墙读入真正的非彩色格式环境中。
Nick Weaver says:
一个 UIView 有一个层(CALayer)。您可以将 animationKeys 发送给它,这将为您提供一组键,用于标识附加到图层的动画。我想如果有任何条目,动画正在运行。如果您想更深入地挖掘,请查看 CALayer 采用的 CAMediaTiming 协议。它提供了有关当前动画的更多信息。
【讨论】:
以上是关于检查 UIView 当前是不是正在制作动画的主要内容,如果未能解决你的问题,请参考以下文章