UIWebView视频播放横向模式适用于iOS 7,而不适用于iOS 8

时间:2014-09-30 07:37:54

标签: ios uiwebview ios8 mpmovieplayer

我有一个应用程序,我启用了所有查看模式,除了我的项目中的肖像倒置。这适用于iOS7,可在纵向和横向模式下播放视频。然后,iOS 8发生了。 在我的app delegate中:

var fullScreenVideoIsPlaying: Bool = false
func application(application: UIApplication, supportedInterfaceOrientationsForWindow window: UIWindow) -> Int {
    if fullScreenVideoIsPlaying == false || UIApplication.sharedApplication().statusBarOrientation.isLandscape {
        return Int(UIInterfaceOrientationMask.Portrait.toRaw())
    } else {
        return Int(UIInterfaceOrientationMask.AllButUpsideDown.toRaw())
    }
}

在我的视图控制器中,我使用了2个通知:

NSNotificationCenter.defaultCenter().addObserver(self, selector: "changeView:", name:UIWindowDidBecomeVisibleNotification, object: self.view.window)
NSNotificationCenter.defaultCenter().addObserver(self, selector: "videoPlayback:", name:UIWindowDidBecomeHiddenNotification, object: self.view.window)

通知方法称为:

func changeView(sender:AnyObject) {
    let string = "\(sender.object)"
    if string.rangeOfString("MPFullscreenWindow") != nil {
        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        appDelegate.fullScreenVideoIsPlaying = false
    }
}

func videoPlayback(sender:AnyObject) {
    let string = "\(sender.object)"
    if string.rangeOfString("MPFullscreenWindow") != nil {
        let appDelegate = UIApplication.sharedApplication().delegate as AppDelegate
        appDelegate.fullScreenVideoIsPlaying = true
    }
}

我的webView ...我正在webview中播放我的视频,而不是我的选择,我无法改变这个

func setupVideoWebView() {
    let request = NSURLRequest(URL: NSURL(string: "https://www.youtube.com/watch?v=3U7xtCBmieQ"))
    videoWebView.loadRequest(request)

    videoWebView.scrollView.scrollEnabled = false
    videoWebView.scrollView.bounces       = false
    videoWebView.delegate                 = self        

    self.view.addSubview(videoWebView)
}

这适用于iOS 7,我知道它有风险b / c我正在寻找可能会改变的字符串。嗯,它确实适用于iOS 8.在iOS 8中,我在旋转app后在控制台中看到了这个:

无法同时满足约束条件。     可能至少下列列表中的一个约束是您不想要的约束。试试这个:(1)看看每个约束并试着找出你不期望的东西; (2)找到添加了不需要的约束或约束的代码并修复它。 (注意:如果您看到您不理解的NSAutoresizingMaskLayoutConstraints,请参阅UIView属性的文档translatesAutoresizingMaskIntoConstraints) (     “”     “= 10) - [UIImageView:0x7fa964a8c9b0](名称:'|':AVAudioOnlyIndi​​catorView:0x7fa964ac8550)>”,     “”,

它持续了一段时间。这让我觉得iOS不喜欢我的肖像/风景限制。因为我没有直接使用MPMoviePlayerViewController,所以我不能使用像this:这样的帮助。我已尝试添加约束

func webViewDidFinishLoad(webView: UIWebView)

但没有运气。 Autolayout是我最好的选择吗?我一直把它视为对其他类似问题的建议,但却无法让它为此目的而工作。非常感谢任何帮助。

1 个答案:

答案 0 :(得分:3)

我遇到了同样的问题,我刚刚找到了解决方法。

  1. 在UIWindow类型的app delegate中创建一个属性,我称之为:“youTube”。

  2. 将此代码添加到包含UIWebView的

    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(youTubeWindowOpened:)
                                             name:UIWindowDidBecomeVisibleNotification
                                           object:self.view.window
    ];
    
    [[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(youTubeWindowClosed:)
                                             name:UIWindowDidBecomeHiddenNotification
                                           object:self.view.window
    ];
    
  3. 然后,编写以下两个新方法:

    - (void)youTubeWindowOpened:(NSNotification *)sender
    {
       appDelegate.youTube = (UIWindow *)sender.object;
    }
    
    - (void)youTubeWindowClosed:(NSNotification *)sender
    {
       appDelegate.youTube = nil;
    }
    
  4. 最后,在AppDelegate中修改“ - application:supportedInterfaceOrientationsForWindow:”:

    - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window
    {
        NSString *nom = NSStringFromClass([[[UIApplication sharedApplication] keyWindow] class]);
    
        // iOS 8
        if (youTube && youTube == window) {
            return UIInterfaceOrientationMaskLandscapeRight;
        }
    
        // iOS < 8
        else if ([nom isEqualToString:@"MPFullscreenWindow"]) {
            return UIInterfaceOrientationMaskLandscapeRight;
        }
        else {
            return UIInterfaceOrientationMaskPortrait;
        }
    }
    
  5. 我知道这不是一个完美的解决方案,但我希望它有所帮助!!