0
点赞
收藏
分享

微信扫一扫

iOS 16横竖屏切换适配


切换横竖屏

oc版本

+ (void)changeOrientationWithInterfaceOrientations:(UIInterfaceOrientationMask)interfaceOrientations viewController:(UIViewController *)viewController errorHandler:(void (^)(NSError *))errorHandler {// 切换横竖屏
#if __IPHONE_16_0 //兼容 Xcode13
if (@available(iOS 16.0, *)) {
UIWindowScene *windowScene = viewController.view.window.windowScene;
if (!windowScene) {
return;
}
[viewController setNeedsUpdateOfSupportedInterfaceOrientations];
UIWindowSceneGeometryPreferencesIOS *geometryPreferences = [[UIWindowSceneGeometryPreferencesIOS alloc] init];
geometryPreferences.interfaceOrientations = interfaceOrientations;
[windowScene requestGeometryUpdateWithPreferences:geometryPreferences errorHandler:^(NSError * _Nonnull error) {
//业务代码
NSLog(@"menglc errorHandler error %@", error);
if (errorHandler) {
errorHandler(error);
}
}];
return;
}
#endif
if([[UIDevice currentDevice]respondsToSelector:@selector(setOrientation:)]) {
SEL selector = NSSelectorFromString(@"setOrientation:");
NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];
[invocation setSelector:selector];
[invocation setTarget:[UIDevice currentDevice]];
int val = UIInterfaceOrientationLandscapeRight;//横屏UIInterfaceOrientationPortrait
[invocation setArgument:&val atIndex:2];
[invocation invoke];
}
}

Swift版本

/// 切换横竖屏
public class func changeOrientation(interfaceOrientations: UIInterfaceOrientationMask, viewController:UIViewController) {
#if //兼容 Xcode13
if #available(iOS 16, *) {
guard let windowScene = viewController.view.window?.windowScene else {
return
}
viewController.setNeedsUpdateOfSupportedInterfaceOrientations()
let geometryPreferences = UIWindowSceneGeometryPreferencesIOS(interfaceOrientations: interfaceOrientations)
windowScene.requestGeometryUpdate(geometryPreferences) { error in

}
return
}
#endif
guard let selector = Selector(("setOrientation")) as Selector?, UIDevice.current.responds(to: selector), let methodSignature = UIDevice.instanceMethod(for: selector) else {
return
}
// todo
}

获取当前屏幕横竖屏状态

oc版本

+ (UIInterfaceOrientation)interfaceOrientation {// 获取当前屏幕横竖屏状态
if (@available(iOS 13.0, *)) {
return [UIApplication sharedApplication].windows.firstObject.windowScene.interfaceOrientation;
}
return [[UIApplication sharedApplication] statusBarOrientation];
}

Swift版本

/// 获取当前屏幕横竖屏状态
public class func interfaceOrientation() -> UIInterfaceOrientation {
guard #available(iOS 13, *) else {
return UIApplication.shared.statusBarOrientation
}
return UIApplication.shared.windows.first?.windowScene?.interfaceOrientation ?? .unknown
}


举报

相关推荐

0 条评论