Самый простой и чистый способ справиться с этим - создать подкласс UIView, в котором AVPlayerLayer используется в качестве layerClass. При этом AVPlayerLayer будет вести себя так же, как обычный слой UIView. Вы можете изменить кадр представления вместо слоя, и не будет никакой неявной анимации.
AVPlayerLayerView.h
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface AVPlayerLayerView : UIView
@property (nonatomic, readonly) AVPlayerLayer *playerLayer;
@end
AVPlayerLayerView.m
#import "AVPlayerLayerView.h"
@implementation AVPlayerLayerView
+ (Class)layerClass {
return [AVPlayerLayer class];
}
- (AVPlayerLayer *)playerLayer {
return (AVPlayerLayer *)self.layer;
}
@end
Теперь вы можете сделать это:
playerLayerView.frame = CGRectMake(0, 0, 400, 400);
Чтобы связать AVPlayerLayer с AVPlayer, просто сделайте это:
playerLayerView.playerLayer.player = player;