seedante / iOS-ViewController-Transition-Demo

《iOS 视图控制器转场详解》配套 Demo
479 stars 129 forks source link

NavigationControllerTransitionDemo 中的bug #8

Open jackhmy opened 7 years ago

jackhmy commented 7 years ago

使用UIView Animation Block 动画来做交互转场,滑动一半松手后,会出现黑框闪屏 swift3、iOS10、simulator iPhone7

seedante commented 7 years ago

@jackhmy 我运行现在的这个 Demo 没有复现你说的问题。“使用UIView Animation Block 动画来做交互转场”,这个具体是什么情况?

jackhmy commented 7 years ago

其实就是直接拿demo跑,并没有改动什么,在我这里出现了黑框闪屏的现象。后面看了ScrollTabBarController demo中似乎有类似的问题以及解决办法,在手势取消的那里加上delegate.interactionController.completionSpeed = 0.99就好了

seedante commented 7 years ago

@jackhmy 忘了说了,你的模拟器的版本是哪个?我的 Xcode 里只有 10.2 版本的模拟器,用这个版本测试没有这个问题。

jackhmy commented 7 years ago

@seedante 10.3的模拟器

seedante commented 7 years ago

@jackhmy 我现在没有条件测试这个版本,看你的说法和 ScrollTabBarController demo 里出现的问题相同,至于这个问题的本质原因我没法解释,但代码本身相当简单,在使用方法上也没有问题,我只能把这个锅推给 iOS 本身了。

jackhmy commented 7 years ago
qq20170412-000243 2x

猜测:这可能是需要在取消或者完成交互,转变非交互时有一个缓冲的动画。 并且我认为speed=1-progress 比0.99会更贴近系统的动画设定

seedante commented 7 years ago

@jackhmy 在写这篇文章时我对这个参数十分不解,文档里对这个参数的作用只是很笼统地说用于加快或是降低动画的速度,因此从来没有用过这个参数。正如你猜测的那样:这可能是需要在取消或者完成交互,转变非交互时有一个缓冲的动画。动画在交互/非交互之间转换时的确有个需要平滑过渡的问题,这是去年写的有关交互动画的文章:https://github.com/seedante/iOS-Note/wiki/Interactive-Animations

那时我一直没有意识到交互转场里的这个问题如何着手解决,现在很清楚了,completionSpeed这个属性就是用来解决动画在交互/非交互状态之间切换时的平滑过渡问题的,怎么用,你贴的这个图就很清楚了,这个就比较坑了,关键的使用方法不放在文档里,却放在了框架的头文件里。那么,所有的交互转场动画都应该使用这个方法来确保不再出现黑屏的问题(现在很清楚了,就是动画状态不连贯造成的视图位置的突变)。多谢你的反馈。