tsc*_*otz 32 uiviewcontroller ios ios8
由于willAnimateRotationToInterfaceOrientation:duration:
被弃用在iOS8上,需要使用viewWillTransitionToSize:withTransitionCoordinator:
代替.
但是,在iOS8上的视图控制器中不会调用此方法.还有什么我需要实现,以便这个回调工作?
我在文档中找不到任何内容.我唯一能找到的是它属于新UIContentContainer
协议.但是,即使我明确地将其添加到我的控制器的协议中,它也不起作用.
有任何想法吗?
小智 39
的viewWillTransitionToSize:withTransitionCoordinator:
似乎只有工作,如果该接口实际上是要改变大小,这意味着我们已经旋转了90度.如果布局上有一个仅允许横向的蒙版,当旋转180度时,界面大小不会改变,因此似乎不会调用此方法.
我在我的应用程序中解决了这个问题,而是通过以下方式注册UIDeviceOrientationDidChangeNotification
通知:
(在我的视图控制器中viewWillAppear
):
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(deviceOrientationDidChange:) name:UIDeviceOrientationDidChangeNotification object:nil];
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
Run Code Online (Sandbox Code Playgroud)
(在我的viewWillDisappear
[记得取消订阅])
[[UIDevice currentDevice] endGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] removeObserver:self name:UIDeviceOrientationDidChangeNotification object:nil];
Run Code Online (Sandbox Code Playgroud)
我deviceOrientationDidChange:
看起来像:
- (void)deviceOrientationDidChange:(NSNotification *)notification {
UIInterfaceOrientation orientation = [[UIApplication sharedApplication] statusBarOrientation];
[self willRotateToInterfaceOrientation:orientation duration:1.0];
}
Run Code Online (Sandbox Code Playgroud)
Rob*_*ert 36
根据文档,记得打电话super
- (void)viewWillTransitionToSize:(CGSize)size
withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[super viewWillTransitionToSize:size withTransitionCoordinator:coordinator];
// ...
}
Run Code Online (Sandbox Code Playgroud)
否则,子视图控制器将不会将消息转发给它们.
我知道这个问题在这一点上有点陈旧,但我认为对于可能遇到问题的人来说,问题可能会以不同的方式解决.如果您尝试通过使用加载一个属于DIFFERENT控制器的视图addSubview(controller.view)
,您还需要将该控制器添加到父级(可能是您要添加到控制器的视图).如果您不将控制器添加到父级,则永远不会收到大小更改的更新.我们后来发现了Apple改变API的原因; 使用iPad专业版,您的SizeClass可以随着多任务处理能力而无需轮换.这也将调用方法:
viewWillTransitionToSize(size: CGSize,
withTransitionCoordinator coordinator: UIViewControllerTransitionCoordinator)
Run Code Online (Sandbox Code Playgroud)
在父类中,如果你覆盖上面的方法,请确保你也打电话给超级或者你会找到另一种方法来击败你的墙头......
归档时间: |
|
查看次数: |
15924 次 |
最近记录: |