0

UIImagePickerControllerセットをに設定してUIImagePickerControllerSourceTypeCamera(つまり、ユーザーが写真を撮ることができる場合)、自分でプッシュしようとしていますが、機能UINavigationalControllerしません(UINavigationalController別のにプッシュできませんUINavigationalController)。

とにかく、このカメラモジュールのカスタムバージョンを作成する方法はあります UIImagePickerControllerSourceTypePhotoLibrary UIImagePickerControllerALAssets?カメラをモーダルビューとしてポップアップする必要がなく、自分でプッシュしたいだけUINavigationalControllerです。

4

3 に答える 3

1

あなたの主な問題は、UIImagePickerControllerそれ自体がUINavigationControllerであるということです。そのため、それをナビゲーションコントローラーにプッシュすると、問題が発生します(すでにわかっているように)

Princeが述べたように、最善の策はAVFoundationを使用して独自のものを作成することです。欠点は、(デフォルトで)タッチしてフォーカスしたり、ピンチしてズームしたりするなど、カメラアプリの優れた機能が失われることですが、これらはすべて自分で追加できます。

このチュートリアルをチェックしてください。このチュートリアルでは、AVFoundationライブラリを使用する方法について説明し、カメラ画面にオーバーレイなどを追加する方法も示しています。次に、google / stackoverflowで、タップしてフォーカスするなどを追加する方法を簡単に見つけることができます:)

于 2012-12-29T07:42:28.647 に答える
1

を使用してカスタムカメラを作成できますAVFoundation

AVFoundationの使用方法については、サンプルAVCamを参照してください。

于 2012-12-29T06:24:23.397 に答える
0

私は同じ問題を抱えていましたが、この方法で解決しました。

写真を撮る場合
1)カメラから(両方ともUINavigationcontrollerとして開く)2)ギャラリーから(ipadの場合はUIpopovercontrollerとして開き、iphoneの場合はnvigationcontrollerとして開く)

最初のセットデリゲート

@interface camera : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate,UIPopoverControllerDelegate>

カメラから画像を取得した後

if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        {
            UIImagePickerController *imagePicker =
            [[UIImagePickerController alloc] init];
            imagePicker.delegate = self;
            imagePicker.sourceType =
            UIImagePickerControllerSourceTypeCamera;
            imagePicker.mediaTypes = [NSArray arrayWithObjects:
                                      (NSString *) kUTTypeImage,
                                      nil];

            imagePicker.allowsEditing = YES;

            imagePicker.wantsFullScreenLayout = YES;

            [self presentViewController:imagePicker animated:YES completion:nil];
            newMedia = YES;
            iscamera = 0;
        }
        else
        {
            UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error to access Camera"
                                                            message:@""
                                                           delegate:nil
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
            [alert show];

        }

ギャラリーから画像を取得

 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
    {
        UIImagePickerController *_picker=nil;
        if (popoverController) {
            [popoverController dismissPopoverAnimated:NO];

        }
        _picker = [[UIImagePickerController alloc] init];
        _picker.delegate = self;        
        _picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        _picker.wantsFullScreenLayout = YES;

        //[popoverController presentPopoverFromBarButtonItem:sender
                               //   permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];

        if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {

           [self presentViewController:_picker animated:YES completion:nil];


        } else
        {
            popoverController = [[UIPopoverController alloc] initWithContentViewController:_picker];
            [popoverController setDelegate:self];
            [popoverController presentPopoverFromRect:btn.frame
                                               inView:self.view
                             permittedArrowDirections:UIPopoverArrowDirectionLeft
                                             animated:YES];
        }
    }
    else
    {
        UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error access photo library"
                                                        message:@"your device non support photo library"
                                                       delegate:nil
                                              cancelButtonTitle:@"OK"
                                              otherButtonTitles:nil];
        [alert show];

    }

デリゲートメソッドで得られる両方の結果

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

}
于 2012-12-29T06:42:21.690 に答える