适配iOS16横屏操纵
if (@available(iOS 16.0, *)) { @try { NSArray *array = [[[UIApplication sharedApplication] connectedScenes] allObjects]; UIWindowScene *ws = (UIWindowScene *)array[0]; Class GeometryPreferences = NSClassFromString(@"UIWindowSceneGeometryPreferencesIOS"); id geometryPreferences = [[GeometryPreferences alloc]init]; [geometryPreferences setValue (UIInterfaceOrientationMaskLandscapeRight) forKey "interfaceOrientations"]; SEL sel_method = NSSelectorFromString(@"requestGeometryUpdateWithPreferences:errorHandler:"); void (^ErrorBlock)(NSError *err) = ^(NSError *err){ NSLog(@"调用了Block%@",err); }; if ([ws respondsToSelector:sel_method]) { (((void (*)(id, SEL,id,id))[ws methodForSelector:sel_method])(ws, sel_method,geometryPreferences,ErrorBlock)); } } @catch (NSException *exception) { NSLog(@"*****************************富丽分割线**************************"); NSLog(@"%@",exception); } @finally { } } else { // 逼迫旋转返来 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 = UIInterfaceOrientationPortrait; [invocation setArgument:&val atIndex:2]; [invocation invoke]; } }2022.09.02更新
在调用上面的方法前实行以下方法
/** 控制旋转 */- (void)configSupportedInterfaceOrientations int)number{ id appDel = [[UIApplication sharedApplication] delegate]; SEL sel_clientstate = NSSelectorFromString(@"setClientstate:"); if ([appDel respondsToSelector:sel_clientstate]) { (((void (*)(id, SEL, NSUInteger))[appDel methodForSelector:sel_clientstate])(appDel, sel_clientstate, number)); }}此中clientstate这个是一个状态值,用来控制 supportedInterfaceOrientationsFor
func application(_ application: UIApplication, supportedInterfaceOrientationsFor window: UIWindow?) -> UIInterfaceOrientationMask { switch clientstate { case 1: return .allButUpsideDown case 2: return .landscape default: return .portrait } } |