iOS animateWithDuration立即完成隐藏显示甚至不透明度

iOS animateWithDuration立即完成隐藏显示甚至不透明度,第1张

概述我想让我的CALayer动画显示一段时间,然后淡出,这是我的代码 [_msgLayer removeAllAnimations];[UIView animateWithDuration:10 delay:0 options:0 animations:^ { _msgLayer.hidden = false; NSLog(@"showing");} completion:^(B 我想让我的CALayer动画显示一段时间,然后淡出,这是我的代码

[_msgLayer removeAllAnimations];[UIVIEw animateWithDuration:10 delay:0 options:0 animations:^ {     _msgLayer.hIDden = false;    NSLog(@"showing");} completion:^(BOol finished) {    NSLog(@"showing done,finished=%d",finished);    [UIVIEw animateWithDuration:10 delay:40 options:0 animations:^ {        _msgLayer.hIDden = true;    } completion:^(BOol hIDeFinished) {        NSLog(@"hIDing done,hIDeFinished);    }];}];

然而,动画根本无法正常工作,一切都几乎立即完成

2014-10-26 10:11:28.249 Foobar[91761:6827358] showing2014-10-26 10:11:28.254 Foobar[91761:6827358] showing done,finished=12014-10-26 10:11:28.255 Foobar[91761:6827358] hIDing done,finished=1

我看到一些类似的问题,有些人说隐藏是不可动画的,但文档说它是可动画的.我也尝试了不透明度,然后同样的结果,动画仍然立即完成.这是为什么?我该如何解决?

_msgLayer是我自己的类继承CALayer,它有自己的绘图方法.这个动画是从网络事件中调用的,就像服务器向iPhone发送消息一样,然后我在屏幕上显示消息.

解决方法 问题是UIVIEw动画用于动画视图.

对使用UIVIEw动画时发生的事情的高概述是块被执行,这会更改视图的属性,而视图的属性又会更改背景层(或直接更改图层属性).当(支持)图层的属性发生更改时,它会询问其委托(如果图层正在支持视图,则始终是视图)以为该动画提供 *** 作.然后,视图可以检查更改是否发生在动画块内部.如果更改发生在动画块内,则视图将返回具有正确持续时间,时序曲线等的动画.

但是,对于未附加到图层的视图,没有代理要求.相反,图层继续寻找“动作”(动画的更通用术语)并最终选择该图层类的默认动作. CALayer上的the documentation for the -actionForKey:方法概述了此行为.

默认 *** 作几乎总是(路径的动画是一个例外)0.25秒长的基本动画.这是你看到的动画.图层实际上默认为其更改设置动画(这是禁用此功能的视图行为),因此您可以从动画块内部的更改和动画块外部的表单中看到此动画.

如果您想了解更多相关信息:

my objc.io article here的前三分之一更详细地解释了视图和层之间的相互作用.我还有a blog post here,其中包括解释隐式动画和显式动画之间的区别.

以上解释了为什么你会看到这种行为.要“修复”它,您可以转到更高的抽象并使用视图而不是图层,或者您自己创建动画对象并将它们添加到图层(UIKit在视图级别执行的工作).

总结

以上是内存溢出为你收集整理的iOS animateWithDuration立即完成隐藏/显示甚至不透明度全部内容,希望文章能够帮你解决iOS animateWithDuration立即完成隐藏/显示甚至不透明度所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/web/1058086.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存