我正在开发一个锁定为纵向模式的应用。然而,一种视图充当各种媒体类型的全屏“播放器”。
我正在使用具有UIView
子视图的UIWebview
子类来播放媒体。
这是在查看堆栈顶部全屏显示的。我的问题出现在只有这个视图旋转景观内容 - 例如视频& PDF文件。
要进行旋转,我在init方法中设置一个观察者:
[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
[[NSNotificationCenter defaultCenter] addObserver:self
selector:@selector(deviceRotated:)
name:UIDeviceOrientationDidChangeNotification
object:nil];
并按原样旋转:
- (void)deviceRotated:(NSNotification *)notification {
UIDeviceOrientation orientation = [[notification object] orientation];
if (orientation == UIDeviceOrientationLandscapeLeft) {
[UIView animateWithDuration:0.6f delay:0.0 options:UIViewAnimationCurveEaseInOut
animations:^{ [self.webView setTransform:CGAffineTransformMakeRotation(M_PI / 2.0)]; }
completion:nil];
}
else if (orientation == UIDeviceOrientationLandscapeRight) {
[UIView animateWithDuration:0.6f delay:0.0 options:UIViewAnimationCurveEaseInOut
animations:^{ [self.webView setTransform:CGAffineTransformMakeRotation(M_PI / -2.0)]; }
completion:nil];
}
else if (orientation == UIDeviceOrientationPortraitUpsideDown) {
[UIView animateWithDuration:0.6f delay:0.0 options:UIViewAnimationCurveEaseInOut
animations:^{ [self.webView setTransform:CGAffineTransformMakeRotation(M_PI)]; }
completion:nil];
}
else if (orientation == UIDeviceOrientationPortrait) {
[UIView animateWithDuration:0.6f delay:0.0 options:UIViewAnimationCurveEaseInOut
animations:^{ [self.webView setTransform:CGAffineTransformMakeRotation(0.0)]; }
completion:nil];
}
}
我知道旋转时需要改变self.webView
的帧大小,但结果却很奇怪。
我已经尝试将容器视图设置为长度为[[UIScreen mainscreen] bounds].size.height
的大“正方形”并将网络视图放在中间,但它的移动方式不一致 - 好像宽度和宽度相同。高度值是从旋转前的尺寸设置的。
我也尝试过设置autoResizingMask
灵活的高度&宽度,但是当容器视图离开屏幕时,这也会在屏幕外拉伸Web视图。