我正在开发一个锁定为纵向模式的应用程序。然而,一种视图充当各种媒体类型的全屏“播放器”。
我正在使用具有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
并将 Web 视图放置在中间,但它的移动不一致 - 似乎宽度和高度值是从旋转前的尺寸中设置的。
我也尝试过设置autoResizingMask
灵活的高度和宽度,但是由于容器视图不在屏幕上,这也会将 Web 视图拉伸到屏幕外。