2012-04-15 39 views
6

Có thể thay đổi kích thước khung có thể hiển thị của UIImagePickerController không? Tôi muốn hiển thị chế độ xem máy ảnh nhưng không hiển thị trên toàn bộ màn hình, nhưng hãy nói trong hộp giới hạn 100x100.định cấu hình kích thước khung hình của UIImagePickerController

Đây là viewDidAppear tôi:

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

tôi không thể tìm thấy một cách để làm điều đó bất cứ nơi nào ... doesnt bất cứ ai sử dụng nó?

+0

Bạn đã giải câu hỏi ur chưa? –

Trả lời

12

Tôi đã thử nghiệm với mã từ bài đăng cuối cùng của mình và nhận xét biến đổi quy mô cuối cùng ((kích thước đầy đủ) và tôi kết thúc bằng một hình ảnh thu nhỏ đáng yêu ở giữa màn hình, vì vậy ! nó chắc chắn không làm việc mã chính xác tôi đã sử dụng, bao gồm zoom/fade-in chuyển tiếp, là -

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

tôi chắc chắn rằng bạn có thể tùy chỉnh nó nhiều hơn, thay đổi vị trí kích thước & của xem camera

.
+1

awsome job dude – coder1010

+1

Mã của bạn hoạt động tốt. Nhưng lề dưới từ màn hình lớp phủ cao hơn lề trên và do đó nó không chính xác đến trung tâm của màn hình. Bất kỳ giải pháp cho điều đó? –

+0

Chỉ cần thay đổi vị trí cuối cùng của bộ điều khiểnXem trong hình động: chặn – SomaMan

1

Đôi khi tôi đã thêm trực tiếp chế độ xem của ImagePicker, mặc dù tôi chưa bao giờ thử nghiệm thay đổi kích thước cuối cùng, nó "phóng to" vào màn hình, cho thấy có thể hiển thị nó ở các kích thước khác nhau trực tiếp từ một trong các dự án của tôi, vì vậy có lẽ không phải tất cả đều có liên quan) -

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

Hãy quan tâm để xem bạn có nhận được kết quả nào không.

+0

nop, không hoạt động, xin lỗi ... Tôi rất ngạc nhiên khi có thứ gì đó đơn giản đến mức không thể tìm thấy ở đâu cả. – TommyG

3

Nếu bạn muốn hiển thị lớp phủ ở trên cùng của UIImagePickerController, chẳng hạn như trong trường hợp của tôi, trong khi ở cùng một thời gian phù hợp với "nguồn cấp dữ liệu máy ảnh trực tiếp" của bộ điều khiển (chế độ xem) ở giữa một số thành phần giao diện người dùng trên lớp phủ của bạn (chẳng hạn như thanh trên cùng và thanh dưới cùng), sử dụng mã sau. Điều này được dựa trên câu trả lời của SomaMan ở trên (THANKS), với sự khác biệt chính của việc hiển thị khung nhìn UIImagePickerController như là một subview của bộ điều khiển hiện tại thay vì như một subview của cửa sổ ứng dụng chính. Đặt mã này trong 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]; 

MẸO: Khi làm cameraViewTransform, hãy chắc chắn để áp dụng các giống biến đổi trên ảnh kết quả rằng chọn chụp cho bạn nếu bạn muốn người dùng kết thúc với cùng một hình ảnh mà họ thấy thông qua chế độ xem của người được chuyển đổi của bạn: P

+0

@ Alex - cách đặt biến đổi trên uiimage? –

+0

@kshitijgodara Xin chào, xin lỗi tôi vừa mới nhận thấy điều này, nhưng về cơ bản tôi đã từ bỏ việc sử dụng UIImagePickerController do những hạn chế của nó. Sử dụng khung công tác AV không khó chút nào và tôi đã viết một bài đăng trên blog bao gồm điều đó như một phần của một số nội dung khác một thời gian ngắn: http://radioactiveukletic.com/2014/01/06/testing-a-camera-app -in-ios-simulator / –

Các vấn đề liên quan