2012-04-15 4 views
6

UIImagePickerController의 표시 프레임 크기를 변경할 수 있습니까? 카메라보기를 표시하고 싶지만 전체 화면이 아니라 100x100 테두리 상자로 말하고 싶습니다. 여기 UIImagePickerController의 프레임 크기 구성

내 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]; 
} 

... 그것을 사용하는 사람을 나던?

+0

UUR 질문을 해결 했나요? –

답변

12

마지막 게시물의 코드를 실험하고 최종 크기 변환 (전체 크기로 만드는 것)을 주석 처리하고 내 화면 중간에 떠있는 사랑스러운 소형 카메라 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]; 

난 당신이 더 그것을 사용자 정의 카메라 뷰의 크기 & 위치를 변경할 수 있습니다 확신

.
+1

awsome job dude – coder1010

+1

코드가 잘 작동합니다. 그러나 오버레이 화면의 아래쪽 여백은 위쪽 여백보다 높기 때문에 정확히 화면 중앙에 오지는 않습니다. 그 어떤 해결책이라도? –

+0

그냥 애니메이션에서 controllerView의 최종 위치를 변경하십시오 : 블록 – SomaMan

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]; 

이 어떤 결과를 얻을 수 있는지 확인하기 위해 관심.

+0

nop, 작동하지 않았다, 미안 ... 나는 너무 단순해서 어디서나 찾을 수 없다는 것에 놀랐다. – TommyG

3

내 경우처럼 UIImagePickerController 위에 오버레이를 표시하려는 경우 오버레이의 일부 UI 구성 요소 (예 : 상단 막대 및 하단 막대) 사이에 컨트롤러의 "라이브 카메라 피드"(보기)를 맞추려면 다음 코드를 사용하십시오. 이것은 UIImagePickerController의 뷰를 메인 애플리케이션 윈도우의 서브 뷰가 아닌 현재 컨트롤러의 서브 뷰로 표시하는 것이 주된 차이점 인 위의 SomaMan의 답변 (감사원)에 기반합니다.() 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]; 

TIP : cameraViewTransform를 수행 할 때, 당신은 사용자가 동일한 이미지와 끝까지하려는 경우 선택 도구가 당신을 위해 캡처하는 동일한 결과 사진을 변환을 적용해야합니다 그들은 당신의 변형 된 피커의 견해를 통해 볼 수 있습니다 : P

+0

@ Alex - uiimage에서 변환을 설정하는 방법? –

+0

@kshitijgodara 안녕하세요, 죄송합니다. 이제 막 알았지 만, 기본적으로 UIImagePickerController를 사용하여 포기했습니다. AV 프레임 워크를 사용하는 것은 전혀 어렵지 않았고, 다른 게시물의 일부로 블로그 게시물을 작성했습니다. http://radioactiveukrainian.com/2014/01/06/testing-a-camera-app -in-ios-simulator / –

관련 문제