在使用Obj-C的最新iOS版本中,如何确定更改后的设备旋转
我在一个只支持iPad的应用程序中安装了一个嵌入式web控制器,在设备旋转后需要更新网页以获得正确的视口大小。我目前正在使用一种不推荐的方法:在使用Obj-C的最新iOS版本中,如何确定更改后的设备旋转,ios,objective-c,xcode,Ios,Objective C,Xcode,我在一个只支持iPad的应用程序中安装了一个嵌入式web控制器,在设备旋转后需要更新网页以获得正确的视口大小。我目前正在使用一种不推荐的方法: didRotateFromInterfaceOrientation: 苹果的文档中说要使用更新的: viewWillTransitionToSize:withTransitionCoordinator: 我看到很多类似的问题,他们都指向这个新的方法 不幸的是,这种新方法发生在设备旋转之前。我需要知道设备旋转后什么时候发生旋转。如果我使用新方法,网页
didRotateFromInterfaceOrientation:
苹果的文档中说要使用更新的:
viewWillTransitionToSize:withTransitionCoordinator:
我看到很多类似的问题,他们都指向这个新的方法
不幸的是,这种新方法发生在设备旋转之前。我需要知道设备旋转后什么时候发生旋转。如果我使用新方法,网页会在方向改变之前更新,网页的大小也会变得不稳定
请不要建议将网页做得更好。我同意这应该发生,但这是我无法控制的。我需要处理这件事
如果没有旧的、不推荐的方法,我如何实现这一点
干杯!
TJ您可以在ViewDidLayoutSubView中执行此操作。但在视图的生命周期中,此方法可能会被多次调用。可以使用具有视图当前宽度的可变viewWidth。如果viewDidlayoutSubviews中视图的宽度发生了更改,则可以断定布局发生了更改,需要重新加载视图
-(void) viewDidLayoutSubviews
{
[super viewDidLayoutSubviews];
if (viewWidth == 0)
{
viewWidth = self.view.bounds.size.width; // First time assign
return;
}
if (viewWidth != self.view.bounds.size.width)
{
viewWidth = self.view.bounds.size.width;
// perform ur reload operation here.
}
}
使用
协调器
为旋转“设置动画”,并收听完成
回调。您可以将nil
作为自定义动画参数:
override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: nil) { _ in
print("Rotation finished")
}
}
代码应该自我解释
编辑(ObjC):
-(void)视图将转换大小:(CGSize)带有转换协调器的大小:(id)协调器{
[coordinator AnimateLongsideTransition:nil completion:^(id_非空上下文){
NSLog(“旋转完成”);
}];
}
这是一个普通的视图控制器功能覆盖。你可以很容易地适应这个。我在答案中添加了ObjC代码,伙计!我在Obj-C中很少工作,在Swift中也没有。只是想让遗留应用程序保持活力。
- (void)viewWillTransitionToSize:(CGSize)size withTransitionCoordinator:(id<UIViewControllerTransitionCoordinator>)coordinator {
[coordinator animateAlongsideTransition:nil completion:^(id<UIViewControllerTransitionCoordinatorContext> _Nonnull context) {
NSLog(@"Rotation finished");
}];
}