0

iPhone 5 でビデオを再生するのに問題があります。ビデオは iPhone でフルスクリーンで正確に再生されますが、Retina ディスプレイに問題があります。全画面に収まらず、右側に白い太いバーが残ります。

次のコードを試しましたが、Retina ディスプレイで動作しません

    outputURL = [NSURL fileURLWithPath:filePath];
    av = [[AVPlayer alloc] initWithURL:outputURL];
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:av];
    if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
    {
        [layer setFrame:CGRectMake(0, -20, 1024, 670)];
    }
    else
    {
        [layer setFrame:CGRectMake(0, -10, 480, 287)];
    }


    if([layer.videoGravity isEqualToString:AVLayerVideoGravityResizeAspect])
    {
        layer.videoGravity = AVLayerVideoGravityResizeAspectFill;
    }
    else
    {
        layer.videoGravity = AVLayerVideoGravityResizeAspect;
    }
    [self.view.layer addSublayer:layer];
    av.actionAtItemEnd = AVPlayerActionAtItemEndNone;
    [[NSNotificationCenter defaultCenter] addObserver:self
                                             selector:@selector(moviePlayBackDidFinish:) 
                                                 name:AVPlayerItemDidPlayToEndTimeNotification
                                               object:[av currentItem]];

解決策を教えてください。ありがとうございました

4

1 に答える 1

1

コードの6行目では、AVPlayerLayerの幅を480ピクセルに設定していますが、iPhone 5の画面の幅は568ピクセルです(横向きの場合)。したがって、これは機能しません。

これで問題が解決するはずです。

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)
{
    [layer setFrame:CGRectMake(0, -20, self.view.frame.width, 670)];
}
else
{
    [layer setFrame:CGRectMake(0, -10, self.view.frame.width, 287)];
}

しかし、なぜその-20 / -10の垂直オフセットが必要なのか、そしてそれらのフレームの高さはどこから来るのか疑問に思います。おそらく、if / elseブロックの代わりに、これも機能する可能性があります。

[layer setFrame:self.view.bounds];
于 2013-02-14T13:26:29.257 に答える