美文网首页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