8

私のiPhoneアプリケーションには、写真を撮るためのUIImagePickerControllerがあります。すべてのデフォルトのカメラコントロールを非表示にし、UIImagePickerControllerのCameraOverLayViewとして2つのボタンを備えたUIViewを追加しました。私のアプリケーションは常にランドスケープモードでのみ実行されます。カメラはランドスケープモードのみを起動します。これで、CameraOverlayViewはLandscape Left側にのみ存在し、LandscapetoRightに変更されません。デバイスの向きが変わるときに、CameraOverlayView LandscapeModeを左右に変更するにはどうすればよいですか?私がそれを修正するのを手伝ってください。それは私のアプリの大きな問題です。このコードは、ランドスケープモードでオーバーレイビューを保持します左

imgpicker.cameraOverlayView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, 117.81);

このコードは、カメラオーバーレイビューをランドスケープモードで保持します。GAffineTransformtransform = self.view.transform;

    transform = CGAffineTransformRotate(transform, (M_PI / 2.0));

    imgpicker.cameraOverlayView.transform = transform;

私はこれらのコードを次のようなUIInterfaceOrientationメソッドで使用しました。

UIInterfaceOrientation orientation= [[UIApplication sharedApplication] statusBarOrientation];
    if (orientation == UIInterfaceOrientationLandscapeLeft) 
    {
        imgpicker.cameraOverlayView.transform = CGAffineTransformRotate(CGAffineTransformIdentity, 117.81);
    }
    else if (orientation == UIInterfaceOrientationLandscapeRight)
    {
        CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, (M_PI / 2.0));
        imgpicker.cameraOverlayView.transform = transform;
    }

しかし、これらは私を助けていません。デバイスの向きの横向きを左右に回転させても、cameraoverlayviewは変更されません。私の問題を解決してくれませんか?ありがとう。

4

1 に答える 1

16

ありがとうございます。CameraOverlayViewの向きの問題を自分で解決しました。私は私の質問で述べたのと同じコードを使用しました。向きを変更するためのUIDeviceOrientation通知を追加しました。以下のコードを見つけてください、

[[UIDevice currentDevice] beginGeneratingDeviceOrientationNotifications];
    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(orientationChanged:) name:@"UIDeviceOrientationDidChangeNotification" object:nil];


- (void) orientationChanged:(NSNotification *)notification
{
    UIDeviceOrientation orientation = [[UIDevice currentDevice] orientation];
if(orientation == UIDeviceOrientationLandscapeLeft)
        {                  
            CGAffineTransform transform = self.view.transform;
            transform = CGAffineTransformRotate(transform, (M_PI/2.0));
            imgpicker.cameraOverlayView.transform = transform;
        } 
        else if(orientation == UIDeviceOrientationLandscapeRight) 
        {   
            imgpicker.cameraOverlayView.transform = CGAffineTransformRotate(CGAffineTransformIdentity,117.81);
        }  
}

このメソッドをコードに追加しました。そのため、ユーザーがデバイスの向きを変更すると、このメソッドが呼び出され、カメラオーバーレイビューの向きが変更されます。このメソッド内の条件を確認してください。そうしないと、アプリがクラッシュします。ありがとう。

于 2012-01-19T06:14:00.077 に答える