[_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立即完成隐藏/显示甚至不透明度所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)