检查 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 当前是不是正在制作动画的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 NSProgressIndicator 当前是不是为动画?

iOS - UIView 动画的限制?

在自定义 UIView 上为 UIButton 设置动画

如何确定当前是不是正在 UIView 中播放动画?

如何检查 NSLayoutConstraint 是不是动画

检查 UIView 是不是显示 UIAlertView