关闭

使用webview播放视频,全屏状态下适应横屏播放

951人阅读 评论(0) 收藏 举报

   最近在做播放视频的功能,选择在webview中加载视频,视频可以全屏播放,但是当设备横放时,播放内容不能随着设备的旋转而转成横屏的全屏播放模式。需要的效果是:应用其他页面只能是竖屏模式,当全屏播放视频时,要适应横屏。

  由于使用webview加载视频,不能直接控制播放视频的控件,没有办法知道视频是否进入全屏模式。

  经过网上一番搜索,找到以下几个方法,使用通知获取进入全屏状态:

一:

<span style="font-family:KaiTi_GB2312;font-size:14px;">    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(videoStarted:) name:MPMoviePlayerDidEnterFullscreenNotification object:nil];// 播放器即将播放通知
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(videoFinished:) name:MPMoviePlayerWillExitFullscreenNotification object:nil];// 播放器即将退出通知</span>
二:
<span style="font-family:KaiTi_GB2312;font-size:14px;">    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoStarted:) name:@"UIMoviePlayerControllerDidEnterFullscreenNotification" object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoStarted:) name:@"UIMoviePlayerControllerDidExitFullscreenNotification" object:nil];
</span>

以上两种方法在iOS8中都接收不到通知,用下面这种方法可以


<span style="font-family:KaiTi_GB2312;font-size:14px;">[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoStarted:) name:UIWindowDidBecomeVisibleNotification object:nil];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(videoFinished:) name:UIWindowDidBecomeHiddenNotification object:nil];</span>

收到通知执行方法:

-(void)youTubeStarted:(NSNotification *)notification

{

    NSLog(@"全屏开始");

    AppDelegate *app = (AppDelegate *)[[UIApplication sharedApplicationdelegate];


    app.isFull = YES;

    

}


-(void)youTubeFinished:(NSNotification *)notification{

    NSLog(@"全屏结束");

    AppDelegate *appDelegate =(AppDelegate *) [[UIApplication sharedApplicationdelegate];

    

    appDelegate.isFull =NO;

    

    if ([[UIDevice currentDevicerespondsToSelector:@selector(setOrientation:)]) {

        

        SEL selector = NSSelectorFromString(@"setOrientation:");

        

        NSInvocation *invocation = [NSInvocation invocationWithMethodSignature:[UIDevice instanceMethodSignatureForSelector:selector]];

        

        [invocation setSelector:selector];

        

        [invocation setTarget:[UIDevice currentDevice]];

        

        int val =UIInterfaceOrientationPortrait;


        [invocation setArgument:&val atIndex:2];

        

        [invocation invoke];

        

    }

}

然后在appdelegate里面:
.h

  1. @interface AppDelegate :UIResponder  
  2. {  
  3. BOOL _isFull; // 是否全屏  
  4. }  
  5. @property (nonatomic)BOOL isFull

.m
  1. - (NSUInteger)application:(UIApplication *)application supportedInterfaceOrientationsForWindow:(UIWindow *)window {  
  2.   
  3. if(_isFull)  
  4.   
  5. returnUIInterfaceOrientationMaskAll;  
  6.   
  7. returnUIInterfaceOrientationMaskPortrait;  
  8.   
  9. }


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:1381次
    • 积分:27
    • 等级:
    • 排名:千里之外
    • 原创:1篇
    • 转载:2篇
    • 译文:0篇
    • 评论:0条
    文章存档