iOS16灵动岛横屏视频播放适配(ZFPlayer)

这篇具有很好参考价值的文章主要介绍了iOS16灵动岛横屏视频播放适配(ZFPlayer)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

项目场景:

手机为iphone14Pro
版本iOS16.0.3
Xcode版本14.2
视频播放第三方库ZFPlayer


问题描述

使用视频时,视频播放自动横屏控制层的返回按钮和暂停按钮都点不到,上图错误、下图正确(控制按钮距离屏幕左右减小50、视频全屏不做改变)
iOS16灵动岛横屏视频播放适配(ZFPlayer)
iOS16灵动岛横屏视频播放适配(ZFPlayer)


原因分析:

  1. 全屏没有考虑灵动岛的范围,这里在屏幕旋转时重置控制层View的frame,全局持有ZFPlayerControlView控制层,将控制层左右缩小合适距离,我这里取得50

    self.controlView.frame = CGRectMake(50, 0, AKScreenHeight-100, AKScreenWidth);
    
  2. 注意在旋转回去时需要将高宽重置回去,重置相对于父容器的,所以是

    CGRectMake(0, 0, self.videoContainerView.width, self.videoContainerView.height)
    

解决方案:

关键代码:

self.playerControlView.orientationWillChange = ^(ZFPlayerController * _Nonnull player, BOOL isFullScreen){
        @strongify(self);

        dispatch_async(dispatch_get_main_queue(), ^{
            if(@available(iOS 16.0, *)){
                if(isFullScreen){
                    self.controlView.frame = CGRectMake(50, 0, AKScreenHeight-100, AKScreenWidth);
                }else{
                    self.controlView.frame = CGRectMake(0, 0, self.videoContainerView.width, self.videoContainerView.height);
                }
            }
        });

    };

全部代码:


#import "ZFAVPlayerManager.h"
#import "ZFPlayerController.h"


//===================

@property (nonatomic, strong) UIView *shadowView;
@property (nonatomic, strong) UIButton *playButton;
@property (nonatomic, strong) UIImageView *mainImageView;

@property (nonatomic ,strong) UIView *videoContainerView;
@property (nonatomic, strong) NSString *mediaUrl;
@property (nonatomic, strong) UILabel *tips4GLabel;

@property (nonatomic, strong) ZFPlayerController *playerControlView;//视频播放器
@property (nonatomic, strong) ZFAVPlayerManager *playerManager;
@property (nonatomic, strong) ZFPlayerControlView *controlView;

//===================

- (void)showVedioView{
    
    self.mediaUrl =@"http://xxxxx.mp4";//视频
    
    self.videoContainerView = [UIView new];
    self.videoContainerView.layer.cornerRadius = 4;
    [self.view addSubview:self.videoContainerView];

    
    self.mainImageView = [UIImageView new];
    [self.view addSubview:self.mainImageView];
    self.mainImageView.layer.cornerRadius = 4;
    self.mainImageView.clipsToBounds = YES;
    self.mainImageView.userInteractionEnabled = YES;
    self.mainImageView.contentMode = UIViewContentModeScaleAspectFill;
    self.mainImageView.hidden = NO;
    
    
    self.playerManager = [[ZFAVPlayerManager alloc] init];
    
    self.playerManager.scalingMode = ZFPlayerScalingModeAspectFit;
    /// 播放器相关
    self.playerControlView = [ZFPlayerController playerWithPlayerManager:self.playerManager containerView:self.videoContainerView];
    self.playerControlView.shouldAutoPlay = NO;
    self.playerControlView.pauseByEvent = YES;
    
    ZFPlayerControlView *controlView = [ZFPlayerControlView new];
    controlView.fastViewAnimated = YES;
    controlView.prepareShowLoading = YES;

    self.playerControlView.controlView = controlView;
    self.controlView = controlView;
    
    UIView *shadowView = [UIView new];
    shadowView.userInteractionEnabled = YES;
    [self.mainImageView addSubview:shadowView];
    shadowView.backgroundColor = ColorHexAlpha(@"#000000", 0.4);
    
    
    self.playButton = [UIButton buttonWithType:UIButtonTypeCustom];
    [self.mainImageView addSubview:self.playButton];
    [self.playButton setImage:[UIImage imageNamed:@"vedio_start_icon"] forState:UIControlStateNormal];
    
    @weakify(self);
    [[self.playButton rac_signalForControlEvents:UIControlEventTouchUpInside] subscribeNext:^(id x) {
        @strongify(self);
        self.playerControlView.assetURL = [NSURL URLWithString:self.mediaUrl];
        self.mainImageView.hidden = YES;
        self.videoContainerView.hidden = NO;
        self.playButton.hidden = YES;
        
        [self.playerControlView.currentPlayerManager play];
        self.playerControlView.playerLoadStateChanged = ^(id<ZFPlayerMediaPlayback>  _Nonnull asset, ZFPlayerLoadState loadState) {
        };
        
        
    }];
    
    
    self.playerControlView.playerPlayTimeChanged = ^(id<ZFPlayerMediaPlayback>  _Nonnull asset, NSTimeInterval currentTime, NSTimeInterval duration) {
        @strongify(self);
        
    };
    
    
    [self.playerControlView setPlayerDidToEnd:^(id<ZFPlayerMediaPlayback>  _Nonnull asset) {
        @strongify(self);
        self.mainImageView.hidden = NO;
        self.playButton.hidden = NO;
        self.videoContainerView.hidden = YES;
    }];
    
    self.playerControlView.orientationWillChange = ^(ZFPlayerController * _Nonnull player, BOOL isFullScreen){
        @strongify(self);

        dispatch_async(dispatch_get_main_queue(), ^{
            if(@available(iOS 16.0, *)){
                if(isFullScreen){
                    self.controlView.frame = CGRectMake(50, 0, AKScreenHeight-100, AKScreenWidth);
                }else{
                    self.controlView.frame = CGRectMake(0, 0, self.videoContainerView.width, self.videoContainerView.height);
                }
            }
        });

    };

   
    
    [self.videoContainerView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(@16);
        make.right.equalTo(@(-16));
        make.top.equalTo(self.view).offset(323*FTGetScreenScale());
        make.height.offset(175*FTGetScreenScale());
    }];

    [self.mainImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.bottom.mas_equalTo(self.videoContainerView);
    }];
    
    [shadowView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.right.top.bottom.equalTo(@0);
    }];
    
    [self.playButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.mainImageView);
        make.top.equalTo(self.mainImageView.mas_top).offset(85*FTGetScreenScale());
        make.width.equalTo(@(92*FTGetScreenScale()));
        make.height.equalTo(@(23*FTGetScreenScale()));
    }];
    
    
    UILabel *label = [[UILabel alloc] init];
    label.frame = CGRectMake(61, 432, 252, 20);
    [self.mainImageView addSubview:label];
    NSMutableAttributedString *string = [
      [NSMutableAttributedString alloc] initWithString:@"当前为非无线网络环境,请注意流量消耗"
      attributes: @{
        NSFontAttributeName: [UIFont fontWithName:@"PingFangSC-Medium" size: 14*FTGetScreenScale()],
        NSForegroundColorAttributeName: [UIColor colorWithRed:255/255.0 green:255/255.0 blue:255/255.0 alpha:1.00],
    }];
    label.attributedText = string;
    label.textAlignment = NSTextAlignmentLeft;
    self.tips4GLabel = label;
    NSInteger status = ((AppDelegate *)[[UIApplication sharedApplication] delegate]).networkStatus;
	 if (status == 1) {
        // 流量提示
        self.tips4GLabel.hidden = NO;
        self.playButton.hidden = NO;
    }else{
        self.tips4GLabel.hidden = YES;
        self.playerControlView.assetURL = [NSURL URLWithString:self.mediaUrl];
        self.mainImageView.hidden = YES;
        self.videoContainerView.hidden = NO;
        self.playButton.hidden = YES;
        
        [self.playerControlView.currentPlayerManager play];
    }
    
    [label mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerX.equalTo(self.mainImageView);
        make.top.equalTo(self.mainImageView.mas_top).offset(52.5*FTGetScreenScale());
        make.width.equalTo(@(252*FTGetScreenScale()));
        make.height.equalTo(@(20*FTGetScreenScale()));
    }];
    
}

oc版本的,Swift请自己再转一下。也有新push到另一个控制层进行播放的,因为需要小屏和全屏播放更丝滑一点,没有采用另一个方案.文章来源地址https://www.toymoban.com/news/detail-402107.html

到了这里,关于iOS16灵动岛横屏视频播放适配(ZFPlayer)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用cordova 打包的app 如何让视频横屏播放 video

    Cordova插件“cordova-plugin-screen-orientation”设置移动端横屏播放video视频 cordova官网可显示详细的介绍

    2024年02月12日
    浏览(35)
  • 【微信小程序/uniapp】视频如何在pad端可以横屏播放

    相信做视频类小程序的伙伴们一定会遇到视频在【pad】系列上播放的问题,我们会发现,当在pad端点击全屏播放的时候,他是竖屏的全屏(如图1),即便我们旋转屏幕,他依旧是竖屏类型的全屏(如图2) (图1) (图2) 而我们想要的效果是全屏【横屏】播放 那么如何能实

    2024年02月13日
    浏览(104)
  • iOS_适配 iOS16 转屏

    问题1:iOS 16 屏幕旋转报错: [Orientation] BUG IN CLIENT OF UIKIT: Setting UIDevice.orientation is not supported. Please use UIWindowScene.requestGeometryUpdate(_:) 解决:iOS16 UIDevice 不再支持 setValue 方法,使用 UIWindowScene 的 requestGeometryUpdate() 的方法代替 问题2: Xcode13 和 Xcode14 编译出的安装包效果不一致

    2024年02月16日
    浏览(78)
  • iOS 16 版本适配

    1、iOS 16 真机调试时需要在设备的设置 — 隐私与安全 — 开发者模式 中打开开发者模式。 2、隐私权限增强,如通过 UIDevice 获取设备名称时,无法获取用户的信息,只能获取设备对应的名称([UIDevice currentDevice].name返回iPhone,不再返回用户自定义的名字) 3、横竖屏,Xcode13.

    2024年02月12日
    浏览(39)
  • SwiftUI适配iOS16导航控制器引起的闪退

    当时iPhone14系列手机升级到iOS16.5.1系统以后,当用户登录后再次退出登录闪退货登录后退出登录闪退。 由于SwiftUI提倡用struct代替类,导致悲剧产生,闪退时无法打印是那个结构体(class类实现时会打印类名),因为是struct也没有deinit跟踪内存是否泄漏。开启僵尸进程打印只有

    2024年02月11日
    浏览(54)
  • android 布局 横屏 android横屏适配

    一、刘海屏适配 1、layoutInDisplayCutoutMode属性 Android 9.0系统中提供了3种layoutInDisplayCutoutMode属性来允许应用自主决定该如何对刘海屏设备进行适配。 LAYOUT_IN_DISPLAY_CUTOUT_MODE_DEFAULT 这是一种默认的属性,在不进行明确指定的情况下,系统会自动使用这种属性。这种属性允许应用程

    2024年02月09日
    浏览(35)
  • SPF9139全力适配ios16与鸿蒙3.0,超实用数据提取、分析、恢复能力UP!

    ​ 如今,群聊已成为人们必不可少的沟通窗口 家人群,好友群,班级群 粉丝群,交友群,工作群 …… 各类群聊铺天盖地般涌来的同时 也有一些群聊沦为了 赌博、传播淫秽视频 、发表不当言论 等违法犯罪行为滋生之地 与此同时 嫌疑人手机中的群消息往往十分琐碎繁杂 办

    2024年02月13日
    浏览(41)
  • SwiftUI 视频教程之 快速播放本地视频,URL 播放视频,自动播放视频,视频结束通知VideoPlayer (iOS 14 +)

    iOS 14引入了viewAVKit的世界。显示实例的内容。在框架内部定义,让我们可以在本地播放视频,而无需从.SwiftUIVideoPlayerVideoPlayerAVPlayerViewAVKitSwiftUIUIKit VideoPlayer以 player 作为初始化参数,是 AVPlayer 的一个实例。 通过 URL 播放视频 带叠加层的视频播放器 自动播放视频 视频结束通

    2024年02月06日
    浏览(112)
  • ReactNative进阶(三十六):iPad横屏适配

    应用RN技术栈实现APP上线后,业务部门领导会上反馈未实现ipad横屏全屏展示,用户体验较差。由此,一场pad横屏全屏展示的APP调优工作由此开展。 时间紧任务重,技术实现上,考虑到存量功能代码改造工作量,RN层面对于横屏改造工作量较大,故RN层面整体实现横屏展示时间

    2024年01月25日
    浏览(41)
  • unity发布WebGl在手机上的横屏适配,webgl横版游戏在手机上直接转横屏

    unity版本2020.1 问题:webgl的横版游戏 1920*1080,在手机上适配的不好,还是竖屏显示, 使用官方的说明,说是只在全屏模式下能旋转,也不好用,可能直接旋转也不会达到理想的效果 解决方案: 1.我这边使用的方案是UI的适配,UGUI,采用的是两套UI,根据不同平台加载不同的资源

    2024年02月02日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包