renzifeng / ZFPlayer

Support customization of any player SDK and control layer(支持定制任何播放器SDK和控制层)
MIT License
7.05k stars 1.75k forks source link

修复iOS16退出全屏后LandscapeWindow停留页面阻挡交互 #1367

Closed Cyfuer closed 1 year ago

Cyfuer commented 1 year ago

首先感谢大佬的辛苦付出,这个库用了很多年了,帮助非常多,白嫖这么多年从不提pr,这次希望能为维护这个库略尽绵薄之力。 如下是这次遇到问题的具体情况:

设备

iPhone 12 Pro Max,iOS 16.1.1

问题

播放器退出全屏后,界面无法交互,检查图层发现是LandscapeWindow未隐藏,定位代码确定是退出全屏时ZFLandscapeRotationManager_iOS16中所修改代码段中获取的fromOrientation、toOrientation都为UIInterfaceOrientationPortrait,导致进入错误的逻辑,LandscapeWindow未执行隐藏逻辑 代码截图

解决

基于以上3点原因建议调换判断条件的位置:

if (fromOrientation == UIInterfaceOrientationPortrait || self.contentView.superview != self.landscapeViewController.view) { ... } else if (toOrientation == UIInterfaceOrientationPortrait) { ... }

westfort4July commented 1 year ago

希望作者合并一下这个PR, 更新一下版本 的确存在这个问题

leleyinhangjia commented 1 year ago

目前我测试一下,可行,具体还没有详细测试,待验证 1.我是登录 APP,和退出登录时候走一遍,看自己情况而定 /!!!: 播放器横屏 iOS 16 window 一直存在的问题/ __block UIWindow window; if (@available(iOS 13, )) { [[UIApplication sharedApplication].connectedScenes enumerateObjectsUsingBlock:^(UIScene _Nonnull scene, BOOL _Nonnull scenesStop) { if ([scene isKindOfClass: [UIWindowScene class]]) { UIWindowScene windowScene = (UIWindowScene )scene; [windowScene.windows enumerateObjectsUsingBlock:^(UIWindow _Nonnull windowTemp, NSUInteger idx, BOOL _Nonnull windowStop) { if (windowTemp.isKeyWindow) { window = windowTemp; }else { windowTemp.hidden = YES; [windowTemp removeFromSuperview]; } }]; } }]; } else { window = [[UIApplication sharedApplication].delegate window]; }