我有一个带有UIImageView的旋转木马对象,在这里我正在尝试subLayer AvPlayerLayer。
它的工作非常好,尽管它没有填满_videoView的全部边界--它的高度似乎更小,尽管我已经测试过将高度更改为极值,而且只要它与UIImageView重叠,它仍然处于这个大小。
我用来实现这一点的代码如下:
UIView *embeddedView = [[UIView alloc] initWithFrame:_videoView.bounds];
embeddedView.center = CGPointMake(100, 140);
AVPlayerItem *avPlayeritem = [[AVPlayerItem alloc] initWithURL:[NSURL URLWithString:[_videoURLS objectAtIndex:carousel.currentItemIndex]]];
AVPlayer *avPlayer = [[AVPlayer alloc] initWithPlayerItem:avPlayeritem];
AVPlayerLayer *avPlayerLayer = [AVPlayerLayer playerLayerWithPlayer:avPlayer];
[avPlayerLayer setFrame:embeddedView.frame];
avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspect;
[avPlayerLayer setNeedsLayout];
[embeddedView.layer addSublayer:avPlayerLayer];
[carousel.currentItemView addSubview:embeddedView];
//Assign to notication to check for end of playback
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(didFinishPlaying:) name:AVPlayerItemDidPlayToEndTimeNotification object:avPlayeritem];
[avPlayer seekToTime:kCMTimeZero];
[avPlayer play];下面是正在发生的事情的图像,您可以在顶部和底部区分它:

是什么导致了这一切,我该如何解决这个问题?
发布于 2014-11-13 12:25:21
我认为视频没有填满videoView的全部边界是逻辑的,因为您设置了avPlayerLayer.videoGravity = AVLayerVideoGravityResizeAspect。您应该将其设置为AVLayerVideoGravityResizeAspectFill,这样就可以了。
区别是:
AVLayerVideoGravityResizeAspect -显示与原始尺寸成比例的视频,不允许任何变形。AVLayerVideoGravityResizeAspectFill --调整视频的大小,以填充其子视图的全部边界,而不关心相称性。最后一件事,做[avPlayerLayer setFrame:embeddedView.bounds] --这比[avPlayerLayer setFrame:embeddedView.frame]好。
希望这会有所帮助:)
发布于 2019-04-29 09:34:40
接受的答案不能解决重复的、重叠的层的问题。相反,不要尝试addSublayer并创建一个AVPlayer支持视图:
斯威夫特
import UIKit
import AVFoundation
/// A simple `UIView` subclass that is backed by an `AVPlayerLayer` layer.
class PlayerView: UIView {
var player: AVPlayer? {
get {
return playerLayer.player
}
set {
playerLayer.player = newValue
}
}
var playerLayer: AVPlayerLayer {
return layer as! AVPlayerLayer
}
override class var layerClass: AnyClass {
return AVPlayerLayer.self
}
}Objective-C
#import <UIKit/UIKit.h>
#import <AVFoundation/AVFoundation.h>
@interface PlayerView : UIView
@property (nonatomic) AVPlayer *player;
@end
@implementation PlayerView
+ (Class)layerClass {
return [AVPlayerLayer class];
}
- (AVPlayer*)player {
return [(AVPlayerLayer *)[self layer] player];
}
- (void)setPlayer:(AVPlayer *)player {
[(AVPlayerLayer *)[self layer] setPlayer:player];
}
@end这样,图层将根据视图适当调整大小。
参考文献:
https://stackoverflow.com/questions/25276602
复制相似问题