BDGViewController 0.0.1

BDGViewController 0.0.1

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布上次发布2014年12月

Bob de Graaf维护。



  • 作者
  • Bob de Graaf

这是从时代伊始就最终解决视图控制器主要问题的子类!

使用此控制器解决了哪些问题?

布局与动画
如今,随着所有的新的屏幕尺寸,您真的需要能够正确设置子视图的frames。当然,当您支持应用中的旋转时,您已经需要这样做!您可以通过使用resizeMasks以及可能的新AutoLayout来取得很大成果,但是随后动画这些子视图可能会很痛苦!

当您使用标准视图控制器时,视图的frame不在viewDidLoad中设置。它最终在viewWillLayoutSubviews中设置,您然后在viewWillLayoutSubviews中可以布局您的子视图。但是这个方法有一个大问题!任何在viewWillLayoutSubviews中设置了frame的子视图都无法进行动画!因为每次您使用[UIView animateWithDuration...执行动画时,viewWillLayoutSubviews方法都会被调用,重置frame并摧毁您所期望的任何美丽动画。但是如何设置子视图的frame呢?

这个解决方案之一是创建一个新的自定义UIView,将其添加到视图控制器的视图中,并创建一个新的方法'updateLayout',然后在viewWillLayoutSubviews中调用此方法。然后在您自定义UIView的updateLayout方法中设置子视图的frames。但请记住,在这个自定义UIView内部,您不能使用layoutSubviews。这将再次破坏任何动画。这个解决方案的问题在于:1. 您需要为每个使用子视图和动画的视图控制器创建这个自定义子视图,带有所有相应的映射、frames等。2. 您已经不再在视图控制器中了!任何按钮/taps等实际上想要视图控制器执行操作,例如使用navigationcontroller是无法实现的。那么您需要创建一个带有代理的protocol(或丑陋的代码属性),这将更加困难。3. 它代码不美观!

这个解决方案!

这个解决方案使用了一个美丽的简单UIViewController,它在感觉上类似于UIView,但仍然是视图控制器!使用这个视图控制器,您可以像使用自定义UIView一样添加子视图,并且您仍然可以动画任何子视图!并且您仍然是视图控制器,因此您仍然具有所有诸如访问navigationcontroller之类的优点!示例

您可以像通常在自定义UIView中一样添加子视图

[self addSubview:subView1];

您可以像通常在自定义UIView中一样布局子视图

-(void)layoutSubviews
{
    //Also there are quick properties to make your life easier, e.g. self.width, self.frame, self.center, etc.
}

因为这个解决方案支持动画,我还添加了一些简单的动画方法!你可以使用简单的方法进行缩放、移动和旋转,它将自动执行这些动画!以下示例很简单,但你也可以设置动画持续时间并添加完成块!

[self moveView:subView1 toPoint:CGPointMake(newX, newY)];

喜欢它吗?

请给它加星标 :)