seedante / iOS-ViewController-Transition-Demo

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

ScrollTabBarController demo 中的bug #7

Open slemon opened 7 years ago

slemon commented 7 years ago

出现bug为点击任何按钮都无反应 复现方式: 1、func handlePan(panGesture: UIPanGestureRecognizer) 内部打一个断点,然后松开断点 2、滑动时,快速点击 tabbaritem,多次这样会出现黑色界面,点击无反应

seedante commented 7 years ago

@slemon 哪个版本,Swift 3 还是 Swift 2.2,你的测试环境?复现方式的第一个步骤松开断点,是什么意思?

JiongXing commented 7 years ago

您好,我在跟着您的文章学习时,关于这段话“但是在 Modal 转场里要注意,presentingView 并非 containerView 的子视图,这时通过viewForKey:方法来获取 presentingView 得到的是 nil,必须通过viewControllerForKey:得到 presentingVC 后来获取。因此在 Modal 转场中,较稳妥的方法是从 fromVC 和 toVC 中获取 fromView 和 toView。” 实测iOS10通过transitionContext.view(forKey: .from)是可以取到fromView的,无论presentingView或是presentedView在Modal转场时,都是containerView的子视图。作者有空确认一下吗?

seedante commented 7 years ago

@JiongXing 我在 iOS 10 的模拟器上快速测试了下,在动画控制器里的animateTransition(using transitionContext: UIViewControllerContextTransitioning)里进行对比验证,没有发现这个现象,依然维持原结论。

在 present 转场里,presentingView 是 fromView,transitionContext.view(forKey: .from)获取得到的是 nil;在 dismiss 转场里,presentingView 是 toView, transitionContext.view(forKey: .to)获取得到的依然是 nil。

请问你是如何测试的?

JiongXing commented 7 years ago

@seedante 我写了个Demo,详见这份文件第40行,无论是present还是dismiss,都能同时取到fromView和toView,不知道是不是我写错了,望看一下,感谢^^

seedante commented 7 years ago

@JiongXing 非常抱歉,那段话有前提条件我没有加上,这段话在 Custom 模式下 Modal 转场下才成立,你的 Demo 里的模式是 .FullScreen(这是 modalPresentationStyle 的默认值),而我测试一直是在 .Custom 模式下,你在你的 Demo 里的 doModel() 里添加这行代码vc.modalPresentationStyle = .custom试试,就能观察到了。

JiongXing commented 7 years ago

@seedante 确实是custom里取不到presentingView,感谢解答。

seedante commented 7 years ago

@JiongXing 多谢你的反馈。

TonyTong1993 commented 7 years ago

您好,运行您的ScrollTabBarController demo,快速点击多个tabBarItem会出现黑屏

seedante commented 7 years ago

@TonyTong1993 听上去和第一个人反馈的问题一样,我需要更多的细节。