2

我正在开发一个锁定为纵向模式的应用程序。然而,一种视图充当各种媒体类型的全屏“播放器”。

我正在使用具有UIViewUIWebview视图的子类来播放媒体。这在查看堆栈的顶部全屏显示。我的问题出现在只为横向内容旋转这个视图 - 例如视频和 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 视图拉伸到屏幕外。

4

0 回答 0