0

私は Apple が提供する AVCam の例を使用していますが、アプリの目的のために多少変更されています。ただし、他のいくつかの問題を修正することを除いて、元のものはどれも実際には変更されていません. しかし、ランドスケープ モードで動作させることになると、大きな障害にぶつかりました。

stackoverflow に関する別の質問から取得した正しいクラスに次のコードがあります。

-(void)willAnimateRotationToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {

[CATransaction begin];
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft){
    captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
} else {
    captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
}

[CATransaction commit];
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

-(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {

[[UIApplication sharedApplication] setStatusBarOrientation:UIInterfaceOrientationLandscapeLeft animated:NO];

return (interfaceOrientation == UIInterfaceOrientationLandscapeLeft);
} 

しかし、うまくいきません。このコードの目的は、電話を動かしたときに横向きにできるようにすることでした。向きを変えるたびに、コンソールに警告がポップアップ表示されます。

WARNING: -[<AVCaptureVideoPreviewLayer: 0x1ed97620> setOrientation:] is deprecated.  Please use AVCaptureConnection's -setVideoOrientation:

この非推奨エラーを修正するために何をすべきかわからない、または非推奨がランドスケープに移行しない原因であるかどうか。助けてください!

4

1 に答える 1

0

この問題を解決した回避策を提供できますが、より良い解決策があるはずです。

-(void)willAnimateRotationToInterfaceOrientation (UIInterfaceOrientation)toInterfaceOrientation
                                    duration:(NSTimeInterval)duration {
if (![[[self captureManager] recorder] isRecording]) {
[CATransaction begin];
if (toInterfaceOrientation==UIInterfaceOrientationLandscapeLeft){
    captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeLeft;
    captureVideoPreviewLayer.frame = CGRectMake(0, 0, 480, 320);

} else if (toInterfaceOrientation==UIInterfaceOrientationPortrait){
    captureVideoPreviewLayer.orientation = UIInterfaceOrientationPortrait;
    captureVideoPreviewLayer.frame = CGRectMake(0, 0, 320, 480);

} else if (toInterfaceOrientation==UIInterfaceOrientationLandscapeRight){
    captureVideoPreviewLayer.orientation = UIInterfaceOrientationLandscapeRight;
    captureVideoPreviewLayer.frame = CGRectMake(0, 0, 480, 320);

}

[CATransaction commit];
[super willAnimateRotationToInterfaceOrientation:toInterfaceOrientation duration:duration];
}

}

于 2012-10-31T19:24:37.120 に答える