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

本文介绍了在iOS应用中,使用webview播放视频遇到的全屏横屏播放问题。当设备横放时,视频无法自动转为横屏全屏。通过监听通知来判断视频是否进入全屏,并在全屏时允许横屏显示,同时在退出全屏时恢复竖屏显示。实现这一功能的关键在于调整设备的屏幕方向设置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

   最近在做播放视频的功能,选择在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. }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值