1

ランドスケープ モードでのみ実行されるアプリがあります。写真を撮るためにカメラを提示すると、画面は横向きに表示されますが、ライブ プレビューは回転します。写真を撮ると、静止プレビューは正しいです。

これでカメラ画像を回転させようとしました:

self.navigationController.navigationBarHidden=YES;
UIImagePickerController *picker=[[UIImagePickerController alloc] init];
picker.delegate=self;
picker.sourceType=UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls=YES;
[picker setCameraFlashMode:UIImagePickerControllerCameraFlashModeOff];
CGAffineTransform transform=picker.view.transform;
transform= CGAffineTransformMakeRotation(-90*M_PI/180);
[picker setCameraViewTransform:transform];
[self presentModalViewController:picker animated:YES];
[picker release];

今、私はライブプレビューを正しい方法で取得しますが、小さな表示領域を取得します (おそらく、ビューが縦向きになっているためですか?)。やはりプレビューは正しいです。

これを修正するにはどうすればよいですか?

4

2 に答える 2

0

ポートレート モードだけでなく、ランドスケープ モードでも写真を撮りたいですか?? 以下は私のコードですが、ここではポートレートモードでプレビューを取得します oly 、ランドスケープモードでそれが必要な場合は、プレビューがポートレートモードでのみ取得されるため、カスタムメソッドを使用して UIImagePickerViewController を作成する必要があります。

ただし、必要なモードのいずれかで写真を撮ることができます。下のこのコードを参照してください..

-(void)cameraAction
{
    // Create image picker controller
    UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];

    // Set source to the camera
imagePicker.sourceType =  UIImagePickerControllerSourceTypeCamera;

    // Delegate is self
imagePicker.delegate = self;

    // Allow editing of image ?
    imagePicker.allowsEditing = NO;

    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        NSLog(@"called");
        // Show image picker
        [self presentModalViewController:imagePicker animated:YES];  
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error accessing the camera" message:@"Camera did not respond" delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:nil]; 
        [alert show]; 
        [alert release];
    }
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{

    // Access the uncropped image from info dictionary
    UIImage *image = [info objectForKey:@"UIImagePickerControllerOriginalImage"];
    [picker release];

    [self dismissModalViewControllerAnimated:NO];

    editImageView=[[EditImageViewController alloc] initWithNibName:@"EditImageViewController" bundle:[NSBundle mainBundle]];
    editImageView.delegate=self;
    [self presentModalViewController:editImageView animated:YES];
    [editImageView.imgView setImage:image];
}
于 2012-07-28T10:08:36.010 に答える
0

私のアプローチは、UIImagePickerController を強制的に表示し、ランドスケープ モードのままにすることです。ここでの本当の + は、ユーザーが縦向きで開こうとしたときにのみアラートを表示する場合、ユーザーが横向きで開始する可能性がありますが、写真を撮っている間に縦向きに回転する可能性があります。

@implementation UIImagePickerController (noRotation)

- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation /* iOS 5 */
{
    return UIInterfaceOrientationIsLandscape(toInterfaceOrientation);
}

- (NSUInteger)supportedInterfaceOrientations /* iOS 6 */
{
    return UIInterfaceOrientationMaskLandscape;
}

@end
于 2012-11-20T16:49:53.510 に答える