我的问题不是如何解决问题,而是为什么会发生这种情况:
从iOS 8.3开始,当在第二个屏幕上显示视频时(通过AirPlay或Lightning->HDMI),屏幕会旋转90º。这在以前版本的iOS上或应用程序以纵向而非横向方式启动时都不是问题。
我创建了一个解决方法,检查iOS版本和屏幕旋转,然后旋转第二个窗口的视图。如果其他人有这个问题,下面是我的解决方案:
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.3f) {
CGFloat width = (_externalWindow.frame.size.width > _externalWindow.frame.size.height) ? _externalWindow.frame.size.width : _externalWindow.frame.size.height;
CGFloat height = (_externalWindow.frame.size.width < _externalWindow.frame.size.height) ? _externalWindow.frame.size.width : _externalWindow.frame.size.height;
CGRect rotatedFrame = CGRectMake(0.0f, 0.0f, width, height);
_externalWindow.frame = rotatedFrame;
if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeLeft && [[UIDevice currentDevice].systemVersion floatValue] < 9.0f) {
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2 * 3);
_externalWindow.transform = transform;
} else if ([UIDevice currentDevice].orientation == UIDeviceOrientationLandscapeRight && [[UIDevice currentDevice].systemVersion floatValue] < 9.0f) {
CGAffineTransform transform = CGAffineTransformMakeRotation(M_PI_2);
_externalWindow.transform = transform;
}
}
编辑:在iOS 9上测试了这个问题,发现了一个有趣的问题,与之前的问题类似。方向显示正确,但框架仍在旋转,因此只显示了部分内容。我调整了我的解决方案,以确保窗框始终像宽屏幕一样。
正如你所知,我只允许在VC:上进行人像处理就可以解决这个问题
-(NSUInteger)supportedInterfaceOrientations {
return UIInterfaceOrientationMaskPortrait;
}