美文网首页iOS开发技术
AVPlayerLayer 设置自动布局

AVPlayerLayer 设置自动布局

作者: 字节码 | 来源:发表于2016-11-14 12:57 被阅读1360次

    如果要设置playerLayer的布局,目前iOS不支持layer设置AutoLayout也不支持autoresizingMask,所以无法给playerLayer设置约束,当然可以采用原始的方法,就是在viewDidLayoutSubviews中再次设置playerLayer的frame,但是这样在屏幕旋转时会有一片短暂的空白区域,虽然很快就消失了,但是这样效果不是很好。

    解决方案: 通过UIView来处理,自定义一个UIView的子类,设置这个view的layerClass为AVPlayerLayer类型,然后直接使用这个子类的layer作为AVPlayerLayer,那么此时不需要设置playerLayer的frame,设置这个view的约束或frame即可

    以下界面我是通过XIB搭建界面
    #import "XYVideoPlayer.h"
    #import <AVFoundation/AVFoundation.h>
    
    @implementation XYVideoPlayer
    
    + (Class)layerClass {
        return [AVPlayerLayer class];
    }
    
    @end
    
    #import "ViewController.h"
    #import <MobileCoreServices/MobileCoreServices.h>
    #import "XYVideoPlayer.h"
    
    @interface ViewController ()
    
    @property (weak, nonatomic) IBOutlet XYVideoPlayer *videoLayer;
    @end
    @implementation ViewController
    - (void)viewDidLoad {
        [super viewDidLoad];
    
        self.videoLayer.autoresizingMask = UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth;
        
        self.asset = [AVAsset assetWithURL:videoURL];
        
        AVPlayerItem *playerItem = [[AVPlayerItem alloc] initWithAsset:self.asset];
        
        self.player = [AVPlayer playerWithPlayerItem:playerItem];
        // 将player输出到显示动画层playerLayer
        self.playerLayer = (AVPlayerLayer *)self.videoLayer.layer;
        [self.playerLayer setPlayer:self.player];
    }
    
    Snip20161114_7.png

    相关文章

      网友评论

      • HappyJiuOk:XYVideoPlayer这个类也是xib创建的?XYVideoPlayer.xib
        HappyJiuOk:谢谢 终于解决了这个AVPlayLayer的问题
        字节码:@吃不胖可咋整啊 是通过xib搭建的,然后在XYVideoPlayer中实现layerClass方法
      • 奥美拉唑:谢谢您 ,看完后恍然大悟 啊哈哈哈哈哈哈哈哈哈哈哈哈

      本文标题:AVPlayerLayer 设置自动布局

      本文链接:https://www.haomeiwen.com/subject/uvshpttx.html