我有一个AVPlayerView
作为第二NSSplitViewItem
个NSSplitViewController
。第一个拆分项目是视频列表。当我选择一个视频时,它会在AVPlayerView
. 问题是,在我调用[self.videoView.player play];
我MediaViewController
的视图根据正在播放的视频大小调整大小之后。
我正在使用StoryBoards
并且我MediaViewController
在画布上设置了AVPlayerView
顶部/底部/尾随/前导来拥抱超级视图。通过调整窗口大小并相应地调整视频大小,这似乎可以正常工作。
我不明白视图在什么时候决定调整自身大小以及如何阻止它。
我已经设定self.videoView.videoGravity = AVLayerVideoGravityResizeAspect;
我错过了什么?
谢谢
编辑 - - - - -
看来问题不在于视频大小,而在于我添加到 videoPlayer contentOverlayView 中的图像叠加层。
我像这样添加叠加层:
if (self.videoView.contentOverlayView.subviews.count == 0)
{
// Add an NSImageView subview to use for overlays
NSImageView *overlayIV = [[NSImageView alloc] initWithFrame:self.videoView.frame];
[overlayIV setTranslatesAutoresizingMaskIntoConstraints:NO];
[overlayIV setImageScaling:NSImageScaleProportionallyUpOrDown];
[self.videoView.contentOverlayView addSubview:overlayIV];
// Set constraints to hug parent
[self.videoView addConstraint:[NSLayoutConstraint constraintWithItem:overlayIV
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:self.videoView
attribute:NSLayoutAttributeTop
multiplier:1.0
constant:0.0]];
[self.videoView addConstraint:[NSLayoutConstraint constraintWithItem:overlayIV
attribute:NSLayoutAttributeBottom
relatedBy:NSLayoutRelationEqual
toItem:self.videoView
attribute:NSLayoutAttributeBottom
multiplier:1.0
constant:0.0]];
[self.videoView addConstraint:[NSLayoutConstraint constraintWithItem:overlayIV
attribute:NSLayoutAttributeLeading
relatedBy:NSLayoutRelationEqual
toItem:self.videoView
attribute:NSLayoutAttributeLeading
multiplier:1.0
constant:0.0]];
[self.videoView addConstraint:[NSLayoutConstraint constraintWithItem:overlayIV
attribute:NSLayoutAttributeTrailing
relatedBy:NSLayoutRelationEqual
toItem:self.videoView
attribute:NSLayoutAttributeTrailing
multiplier:1.0
constant:0.0]];
}
然后当我添加一个新的图像覆盖时,它有时会调整窗口的大小:
NSImageView *overlayIV = [self.videoView.contentOverlayView.subviews firstObject];
if (overlayIV)
{
if (image)
{
overlayIV.image = image;
}
else
{
overlayIV.image = nil;
}
}