2013-09-26 147 views
23

Trình điều khiển bộ chọn hình ảnh của tôi được đặt trong bộ điều khiển bật lên. Trên iOS 6 mọi thứ hoạt động tốt, nhưng trên iOS 7 hình ảnh được xoay và tất cả các chuyển động đang làm câu: khi chuyển hình ảnh bên trái iPad xuống, khi di chuyển hình ảnh sang trái, v.v.ios 7 bộ chọn hình ảnh bên trong popover hành vi sai

Đây là mã để hiển thị máy ảnh của tôi:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
    imagePicker.delegate = self; 
    imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

    objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
    [objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0) 
           inView:self.view 
       permittedArrowDirections:UIPopoverArrowDirectionRight 
           animated:YES]; 

ứng dụng của tôi chỉ sử dụng chế độ phong cảnh, bây giờ ảnh có thể xoay: enter image description here

Trả lời

17

Khi Apple's Official Doc nói:

Trình bày giao diện người dùng. Trên iPhone hoặc iPod touch, thực hiện thao tác này (toàn màn hình) bằng cách gọi phương thức presentViewController: hoạt hình: hoàn thành: của trình điều khiển chế độ xem hiện hoạt, chuyển bộ điều khiển bộ chọn hình ảnh được định cấu hình của bạn làm bộ điều khiển chế độ xem mới.

On iPad, cách chính xác để trình bày một bảng chọn hình ảnh phụ thuộc vào loại nguồn của nó, như tóm tắt trong bảng này:

  • Máy ảnh Hình ảnh: Sử dụng toàn màn hình
  • Thư viện Saved: Phải sử dụng một popover
  • Photos Album: Phải sử dụng một popover

...

Trên iPad, nếu bạn chỉ định loại nguồn của UIImagePickerControllerSourceTypeCamera, bạn có thể trình bày bộ chọn hình ảnh một cách bình thường (toàn màn hình) hoặc bằng cách sử dụng một cửa sổ bật lên. Tuy nhiên, Apple khuyên bạn nên trình bày giao diện camera chỉ toàn màn hình.

Mặc dù nó nói "bạn có thể trình bày các modally chọn hình ảnh (toàn màn hình) hoặc bằng cách sử dụng một popover", như bạn thấy bằng cách sử dụng một popover sẽ cho kết quả với vấn đề kỳ lạ này. Tôi đoán đây có thể là lỗi trên iOS 7 SDK.

tôi vẫn đang cố gắng để khắc phục vấn đề này, nhưng bây giờ, cách duy nhất tôi có thể nói là để hiển thị nó modally bởi

-presentViewController:animated:completion: 

phương pháp, mà là ở độ toàn màn hình (Trên thực tế, tôi don không thích cách này).

Và có một số THREAD đã thảo luận về nó trên Diễn đàn dành cho nhà phát triển của Apple, bạn có thể xem qua nó. ;)

+0

cần có một số công việc xung quanh để giải quyết này .. làm bất cứ ai biết? – Tarun

+0

@Tarun chưa, tôi chỉ chọn hiển thị toàn màn hình cho trường hợp này. Tôi sẽ cập nhật câu trả lời này khi tôi có một giải pháp tốt hơn. :) – Kjuly

+0

tại sao bạn không sử dụng AvFoundation thay vì UIImagePicker? – Vidhyanand

0

Các chỉ có một cách đó hoạt động đúng trong iOS7 đang sử dụng của

-presentViewController: hoạt hình: hoàn thành:

Bạn có thể thử thay đổi quan điểm máy ảnh chuyển đổi sở hữu bởi cameraViewTransform nhưng kết quả sẽ xấu xí. Việc thêm chế độ xem vào ViewController tùy chỉnh (xoay quanh cảnh quan) cũng sẽ cho bạn kết quả xấu xí. Tôi bắt đầu ghét phiên bản hệ điều hành này.

+0

không hoạt động .. Ngoài ra, không thể thực hiện chuyển đổi loại hack. – Tarun

+1

iOS 7 đã phá vỡ rất nhiều mã hiện có !!! Gây rất nhiều rắc rối cho tôi. – Emmy

6

Hãy thử như sau:

UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; 
imagePicker.delegate = self; 
imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; 

CGFloat scaleFactor=1.3f; 

switch ([UIApplication sharedApplication].statusBarOrientation) { 

    case UIInterfaceOrientationLandscapeLeft: 

     imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * 90/180.0), scaleFactor, scaleFactor); 

     break; 

    case UIInterfaceOrientationLandscapeRight: 

     imagePicker.cameraViewTransform = CGAffineTransformScale(CGAffineTransformMakeRotation(M_PI * -90/180.0), scaleFactor, scaleFactor); 

     break; 

    case UIInterfaceOrientationPortraitUpsideDown: 

     imagePicker.cameraViewTransform = CGAffineTransformMakeRotation(M_PI * 180/180.0); 

     break; 

     default: 
      break; 
    } 

objPopView = [[UIPopoverController alloc] initWithContentViewController:imagePicker]; 
[objPopView presentPopoverFromRect:CGRectMake(842, 163, 0, 0) 
          inView:self.view 
      permittedArrowDirections:UIPopoverArrowDirectionRight 
          animated:YES]; 

tín dụng để https://stackoverflow.com/a/19071958/1363779