7

UIImagePickerControllerの表示可能なフレームサイズを変更することはできますか? 画面全体ではなくカメラビューを表示したいのですが、100x100のバウンディングボックスで言います。

これが私のviewDidAppearです:

- (void) viewDidAppear:(BOOL)animated {

UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.sourceType = UIImagePickerControllerSourceTypeCamera;
picker.showsCameraControls = NO;
picker.cameraDevice = UIImagePickerControllerCameraDeviceFront;
picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, CAMERA_TRANSFORM_X, CAMERA_TRANSFORM_Y);

[self presentModalViewController:picker animated:YES];  

[super viewDidAppear:YES];
 }

どこにもそれを行う方法が見つかりませんでした...誰もそれを使用していませんか?

4

3 に答える 3

13

前回の投稿のコードを試してみて、最終的なスケール変換 ((フルサイズにするもの) をコメント アウトしたところ、画面の真ん中に素敵なミニチュア カメラ imagePicker が浮かんでいたので、間違いなく機能します。 ! ズーム/フェードイン遷移を含む、私が使用した正確なコードは -

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

imagePickerController.delegate = self;
imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

UIView *controllerView = imagePickerController.view;

controllerView.alpha = 0.0;
controllerView.transform = CGAffineTransformMakeScale(0.5, 0.5);

[[[[UIApplication sharedApplication] delegate] window] addSubview:controllerView];

[UIView animateWithDuration:0.3
                  delay:0.0
                options:UIViewAnimationOptionCurveLinear
             animations:^{
                 controllerView.alpha = 1.0;
             }
             completion:nil
 ];

[imagePickerController release];

もっとカスタマイズして、カメラ ビューのサイズと位置を変更できると思います。

于 2012-04-16T08:01:05.517 に答える
3

私の場合のように、UIImagePickerController の上にオーバーレイを表示すると同時に、オーバーレイ上のいくつかの UI コンポーネント (トップバーなど) の間にコントローラーの「ライブカメラフィード」(ビュー) を合わせたい場合と下のバー)、次のコードを使用します。これは、上記の SomaMan の回答 (THANKS) に基づいています。主な違いは、UIImagePickerController のビューを、メイン アプリケーション ウィンドウのサブビューではなく、現在のコントローラーのサブビューとして表示することです。次のコードを viewDidLoad() に入れます。

// Overlay view with custom camera controls and a top bar and a bottom bar
self.overlay = [[CameraOverlayView alloc] initWithFrame:self.view.bounds];
[self setOverlayViewModel];

self.imagePicker = [[UIImagePickerController alloc] init];
self.imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;
self.imagePicker.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;
self.imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff;
self.imagePicker.showsCameraControls = NO;
self.imagePicker.navigationBarHidden = YES;
self.imagePicker.toolbarHidden = YES;
self.imagePicker.delegate = self;

UIView *imagePickerView = self.imagePicker.view;

if ([[UIScreen mainScreen] bounds].size.height == 568.0f) {
    // iPhone 5, 16:9 ratio, need to "zoom in" in order to fill the screen since there is extra space between top and bottom bars on a taller screen
    self.imagePicker.cameraViewTransform = CGAffineTransformScale(self.imagePicker.cameraViewTransform, 1.5, 1.5); // change 1.5 to suit your needs
}
CGRect cameraViewFrame = CGRectMake(0, self.overlay.topBarHeight, 
                                    self.view.bounds.size.width, 
                                    self.view.bounds.size.height - self.overlay.topBarHeight - self.overlay.bottomBarHeight);
imagePickerView.frame = cameraViewFrame;

// keep this order so that the overlay view is on top of the "live camera feed" view
[self.view addSubview:imagePickerView];
[self.view addSubview:self.overlay];

ヒント: cameraViewTransform を実行するときは、ピッカーがキャプチャした結果の写真に同じ変換を適用するようにしてください。変換されたピッカーのビューを通してユーザーが見るのと同じ画像で終わるようにしたい場合:P

于 2013-03-06T01:59:11.967 に答える
1

ImagePickerのビューを直接追加することもありますが、最終的なサイズを変更する実験はしていませんが、画面に「ズーム」して、さまざまなサイズで表示できる可能性があることを示唆しています(コードは私のプロジェクトなので、おそらくすべてが関連しているわけではありません)-

UIImagePickerController *imagePickerController = [[UIImagePickerController alloc] init];

imagePickerController.delegate = self;
imagePickerController.mediaTypes = [NSArray arrayWithObjects:(NSString *)kUTTypeImage, nil];
imagePickerController.sourceType = UIImagePickerControllerSourceTypeCamera;
imagePickerController.cameraCaptureMode = UIImagePickerControllerCameraCaptureModePhoto;

UIView *controllerView = imagePickerController.view;

controllerView.alpha = 0.0;
controllerView.transform = CGAffineTransformMakeScale(0.5, 0.5);

[[[[UIApplication sharedApplication] delegate] window] addSubview:controllerView];

[UIView animateWithDuration:0.3
                      delay:0.0
                    options:UIViewAnimationOptionCurveLinear
                 animations:^{
                     controllerView.transform = CGAffineTransformMakeScale(1.0, 1.0);
                     controllerView.alpha = 1.0;
                 }
                 completion:nil
 ];

[imagePickerController release];

これで結果が得られるかどうかを確認してください。

于 2012-04-15T18:23:09.367 に答える