使用d簧和支柱,大多数旋转由iOS自动完成.但是,选项卡A还需要进一步定位,它是在VC的willRotatetoInterfaceOrIEntation方法中完成的.
选择选项卡A的VC并旋转屏幕时,该VC将收到willRotatetoInterfaceOrIEntation消息(由iOS从UITabbarController传播),并且生成的旋转正确.
但是,当选定的选项卡为B并且旋转屏幕时,不会调用A的willRotatetoInterfaceOrIEntation.说得通.但是,如果我然后选择选项卡A,我只得到应用其d簧和支柱的结果,而不进行其willRotatetoInterfaceOrIEntation完成的后处理.
经过一段时间的努力,在未能在网上找到解决方案之后,我想出了以下内容.我将UITabbarController子类化,并在其willRotatetoInterfaceOrIEntation中调用所有VC的willRotatetoInterfaceOrIEntation,无论哪个是selectedVIEwController:
- (voID) willRotatetoInterfaceOrIEntation:(UIInterfaceOrIEntation)toInterfaceOrIEntation duration:(NSTimeInterval)duration { if (self.vIEwControllers != nil) { for (UIVIEwController *v in self.vIEwControllers) [v willRotatetoInterfaceOrIEntation:toInterfaceOrIEntation duration:duration]; }}
它有效,但它看起来像一个黑客,我的问题是我是否正在做正确的事情.有没有办法告诉iOS在屏幕旋转后第一次显示它之前总是调用VC的willRotatetoInterfaceOrIEntation?
解决方法 处理自定义布局的最佳方法是通过子类化UIVIEw并覆盖layoutSubvIEws方法.无论何时更改(以及其他时间),系统都会将layoutSubvIEws发送到视图.因此,当您的视图A即将出现在具有不同大小的屏幕上时(因为界面在视图B在屏幕上时旋转),系统会向视图A发送layoutSubvIEws消息,即使它没有向视图控制器A发送一个willRotatetoInterfaceOrIEntation : 信息.如果您的目标是iOS 5.0或更高版本,则可以覆盖UIVIEwController子类的vIEwDIDLayoutSubvIEws方法并在那里进行布局,而不是子类化UIVIEw.我更喜欢在我的视图中使用layoutSubvIEws,以使我的视图特定逻辑与我的控制逻辑分开.
在willRotatetoInterfaceOrIEntation中进行布局也是一个坏主意:因为系统在实际更改视图大小之前以及旋转动画块之前发送该消息.它在旋转动画块内发送willAnimateRotationToInterfaceOrIEntation:duration:,layoutSubvIEws和vIEwDIDLayoutSubvIEws消息,因此如果在旋转期间视图在屏幕上,则子视图的重新定位将被动画化.
总结以上是内存溢出为你收集整理的ios – UITabBarController的标签旋转和willRotateToInterfaceOrientation传播全部内容,希望文章能够帮你解决ios – UITabBarController的标签旋转和willRotateToInterfaceOrientation传播所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)