2010-08-04 33 views
6

Tôi đã nâng cấp cả iPhone và SDK của mình lên iOS 4.0.1 và bây giờ Ứng dụng của tôi không chạy giống như cách nó đang chạy trong iOS 3.x.UIImagePickerController cameraViewTransform hoạt động khác nhau trong iOS 4

Ứng dụng của tôi sử dụng UIImagePickerController với máy ảnh tùy chỉnhOverlayView (mà tôi sẽ chặn trong bài đăng này). Điểm chính là tôi cần phải xem camera iphone ở chế độ toàn màn hình. Để đi thẳng vào vấn đề, tôi sẽ đặt một số mã và ảnh chụp màn hình để giải thích những gì đang xảy ra.

Tôi đã tạo Ứng dụng xem dựa trên sử dụng các dự án mẫu XCode có tên "CameraTransform", vì vậy tôi có hai lớp: CameraTransformAppDelegateCameraTransformViewController, ok! Trong viewDidAppear phương pháp 's CameraTransformViewController tôi đặt đoạn mã sau:

- (void)viewDidAppear:(BOOL)animated { 
    [super viewDidAppear:animated]; 

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

    picker.sourceType = UIImagePickerControllerSourceTypeCamera;   
    picker.delegate = self; 

    //[self configurePicker_FirstAttempt:picker]; Use this! 
    //[self configurePicker_SecondAttempt:picker]; Use this too! 

    [self presentModalViewController:picker animated:YES]; 
} 

- (void)configurePicker_FirstAttempt:(UIImagePickerController*) picker { 
    picker.showsCameraControls = NO; 
    picker.navigationBarHidden = YES; 

    // not needed (use defaults) 
    //picker.toolbarHidden = YES; 
    //picker.wantsFullScreenLayout = YES; 
} 

- (void)configurePicker_SecondAttempt:(UIImagePickerController*) picker { 

    // Transform values for full screen support 
    CGFloat cameraTransformX = 1.0; 
    CGFloat cameraTransformY = 1.12412; 

    picker.cameraViewTransform = CGAffineTransformScale(picker.cameraViewTransform, cameraTransformX, cameraTransformY); 
} 

Chạy dự án với/i nhận:

  • cả configurePicker_FirstAttemptconfigurePicker_SecondAttempt phương pháp các cuộc gọi nhận xét: defaultPicker.png.
  • chỉ configurePicker_SecondAttempt cuộc gọi phương thức đã nhận xét: configurePicker_FirstAttempt.png.
  • cả hai configurePicker_FirstAttemptconfigurePicker_SecondAttempt các cuộc gọi phương thức không được chú trọng: configurePicker_SecondAttempt.png.

LƯU Ý:

  1. Trong iOS 3.x tôi đã sử dụng cách tiếp cận thứ ba (cả hai phương pháp không chú thích) để cấu hình công cụ chọn, đó là chương trình ở chế độ toàn màn hình mà không cần sự "thanh đen" ở phía dưới .
  2. Tôi đã kiểm tra giá trị ban đầu picker.cameraViewTransform (trước khi được thu nhỏ) và được đặt thành Nhận dạng (như mong đợi).
  3. Các picker.view.frame được thiết lập để của giới hạn màn hình (0.0, 0.0, 320,0, 480,0)
  4. Tôi cố gắng để nối một bản dịch với picker.cameraViewTransform (sau khi bị thu nhỏ lại), như thế này: CGAffineTransformTranslate(picker.cameraViewTransform, 0.0, 20.0); và tôi nhận ra rằng có một số phần của "chế độ xem máy ảnh" đã bị ẩn (có thể nguồn gốc của nó không phải là 0.0, 0.0), vì vậy tôi có thêm "chế độ xem máy ảnh" trên màn hình.

Dường như trong SDK mới mà UIImagePickerController đã thay đổi theo một cách nào đó, có thể điều khiển máy ảnh có kích thước khác nhau giống nhau.

Có ai gặp sự cố này không?

+0

Tôi cũng gặp phải vấn đề tương tự và cảm ơn mẹo có tỷ lệ. Tôi đã thử dịch, nhưng nó dường như không bị ảnh hưởng bởi nó. Nó thực sự lạ những gì đang xảy ra ở đây. Tôi sẽ liên kết với tính năng chia tỷ lệ ngay bây giờ. Nếu ai đó có một câu trả lời đúng cho vấn đề này, chúng tôi chắc chắn sẽ đánh giá cao nó. – Buju

Trả lời

14

ios 4.0 kỳ diệu số 1936/320 = 6,05, 2592/6,05 = 428, 480-428 = 52 52/(428/2) = 0,24299 + 1 = 1,24299

ios 3.0 kỳ diệu số 1536/320 = 4,8 2048/4,8 = 427 480-427 = 53 53/427 = 0,121412 + 1 = 1,12412

Đó là mối quan hệ cameraresolution-screenresolution

Đối với iOS 3.0 cameraViewTransform được áp dụng từ đầu cái bạn phải sử dụng tất cả chiều cao. Nhưng trong iOS4 nó được áp dụng từ trung tâm của khung hình, do đó bạn phải sử dụng một nửa chiều cao. Và bạn phải di chuyển khung xuống (52/2) để rời khỏi khung ở giữa.

+0

Xin chào Ela, Bạn có ý tưởng nào về máy ảnh iPad chỉ ở chế độ ngang không ?? – iBhavik

2

Tôi đang tìm biến đổi tỷ lệ mới cho iPhone 4 thành ~ 1.25 (thay vì ~ 1.12).

Tôi dành một vài phút cố gắng tìm ra những con số ma thuật này đến từ đâu - tôi cho rằng có một số mối quan hệ giữa độ phân giải màn hình & độ phân giải của camera, nhưng tôi không thể tìm ra được ...

Nếu có ai đó, hãy đăng câu trả lời - Tôi ghét số ma thuật.

FYI độ phân giải máy ảnh của iPhone 4 là 2592x1936, trong khi iPhone 3GS là 2048x1536.

4

Tôi không chắc chắn về iOS 3.0 nhưng đối với iOS 4.0, cameraViewTransform được áp dụng từ trung tâm của khung.Bạn có thể xác minh điều này bằng cách trước tiên áp dụng biến đổi bản dịch.

CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, 27.0); 
imagePickerController.cameraViewTransform = translate; 

Bạn có thể thấy điều này sẽ chuyển chế độ xem đến chính giữa. Tiếp theo áp dụng các biến đổi quy mô và bạn sẽ thấy rằng nó lấp đầy màn hình.

CGAffineTransform scale = CGAffineTransformScale(translate, 1.125, 1.125); 
imagePickerController.cameraViewTransform = scale; 

Nếu biến đổi tỷ lệ đơn lẻ hoạt động cho iOS 3 và công ty thì biến đổi được áp dụng cho điểm neo khác như đầu trung tâm. Bạn nên luôn luôn mở rộng tuyến tính theo cả hai hướng hoặc hình ảnh của bạn sẽ bị lệch.

3

CGAffineTransformMakeTranslation sẽ không hoạt động trực tiếp trên cameraViewTransform. Vì vậy, hãy sử dụng CGAffineTransformScale để áp dụng CGAffineTransformMakeTranslation.

float yOffset = 44.0; 
CGAffineTransform translate = CGAffineTransformMakeTranslation(0.0, yOffset); 
self.cameraFeed.cameraViewTransform = CGAffineTransformScale(translate, 1, 1); 
Các vấn đề liên quan