美文网首页iOS技术资料iOS高阶UI相关iOS学习笔记
关于UIPresentationController转场动画的坑

关于UIPresentationController转场动画的坑

作者: LeafRead | 来源:发表于2016-04-06 23:52 被阅读1323次

  动手写的第一篇文章就是为了告诫大家,在UIPresentationController中的一个巨坑提出来,因为我在遇到这个问题的时候,为了解决这个问题真的是死了好多脑细胞,最后才发现居然是一个重写系统方法出错; 好了,废话不多说,直接上BUG

一   BUG重现

1.下图是程序正常启动,内存大写和模拟器显示页面

弹出控制器视图

2.点击导航栏中间自定义按钮去,弹出控制器视图,内存有所上升,暂且我们认为是正常内存增加(这里就是自定义控制器继承UIPresentationController,然后在主控制器内设置转场代理为当前控制器)

// 实现这个代理方法目的:改变弹出View的尺寸

func presentationControllerForPresentedViewController(presented: UIViewController, presentingViewController presenting: UIViewController, sourceViewController source: UIViewController) -> UIPresentationController? 

}

//然后在自定义控制器真正去改变view的尺寸

// MARK:- 系统回调函数  (提示:BUG就是这个方法造成的containerViewDidLayoutSubviews)

override func containerViewDidLayoutSubviews() {

super.containerViewDidLayoutSubviews()

//改变弹出页面的frame

presentedView()?.frame = CGRectMake(100, 50, 180, 250)

出现bug

//程序中还有个功能,为控制器添加蒙版,并且设置点击手势,手势执行将弹出的view收回的动作;  但图中我点击蒙版之后,view不但没有收回,蒙版也没有移除,反而内存飙升,模拟器视图毫无反应

继续观察

 //内存继续飙升, 受不了了,果断终止检查程序

二   解决bug

由于经验缺少,碰到这样的问题真的是无从下手,一个一个方法排除,抱着试一试的想法,将这个containerViewDidLayoutSubviews 改为containerViewWillLayoutSubviews;重新运行程序,果然bug没有复现

小结一下

本文的目的主要能给读者一些提示,在使用UIPresentationController做modal效果的窗口视图时,一定得注意这些细节,如果和小编一样的bug,那么恭喜你,你可以立马解决这个问题了......

另外:点击弹出按钮弹出小窗口的demo,需要的读者,可以留言......

小结

相关文章

网友评论

  • 那些傲慢的404:476245253@qq.com需要,谢谢
  • Brice_Zhao:感谢小编分享,1109961917@qq.com 需要
  • SwiftAI:containerViewDidLayoutSubviews是页面显示结束之后才布局子控件containerViewWillLayoutSubviews是即将显示的时候布局子控件,
    布局子控件应该在View还没有显示(即将显示)的时候布局, 第一个方法布局的晚了
  • 罗火火:1274227037@qq.com 求demo 谢谢
  • Jabne:17710474384@189.cn 谢谢
  • 4305824b6977:184507365@qq.com 需要,谢谢

本文标题:关于UIPresentationController转场动画的坑

本文链接:https://www.haomeiwen.com/subject/glhmlttx.html