3

我有一个AVPlayerView作为第二NSSplitViewItemNSSplitViewController。第一个拆分项目是视频列表。当我选择一个视频时,它会在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;
    }
}
4

0 回答 0