2013-02-07 25 views
11

Tôi đã tạo một ứng dụng để chụp ảnh từ máy ảnh. Đây là mã của tôiNgoại lệ trong iPad, UIImagePickerController phải được trình bày qua UIPopoverController

-(IBAction) showCameraUI { 
    BOOL hasCamera = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]; 
    UIImagePickerController* picker = [[UIImagePickerController alloc] init]; 
    picker.delegate = self; 
    picker.sourceType = hasCamera ? UIImagePickerControllerSourceTypeCamera : UIImagePickerControllerSourceTypePhotoLibrary; 
    [self presentModalViewController:picker animated:YES]; 
} 

Và thực hiện phương pháp đại biểu này cho được hình ảnh chụp

- (void)imagePickerController:(UIImagePickerController *)picker 
didFinishPickingMediaWithInfo:(NSDictionary *)info 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
    UIImage* image = [info objectForKey:UIImagePickerControllerOriginalImage]; 
    UIImage *yourImageView = image; 
} 

thực hiện phương pháp này nếu người dùng hủy bỏ bộ điều khiển

- (void)imagePickerControllerDidCancel:(UIImagePickerController*)picker 
{ 
    [picker dismissModalViewControllerAnimated:YES]; 
} 

Nhưng nó cho thấy ngoại lệ này. Có ai có bất kỳ ý tưởng tại sao nó được hiển thị ngoại lệ như vậy sau khi thực hiện dòng cuối cùng của hàm showCameraUI.

UIStatusBarStyleBlackTranslucent is not available on this device. 2013-02-07 
10:06:06.976 CaptureImage[460:c07] *** Terminating app due to uncaught exception 
'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be 
presented via UIPopoverController' 
+1

Something điều này là sai, bởi vì tôi thấy tiêu đề câu hỏi như _ “UIStatusBarStyleBlackTranslucent là không có sẵn trên thiết bị này cho iPad ”_ – Tricertops

Trả lời

14

Về ngoại lệ, thông báo lỗi rất rõ ràng. "Trên iPad, UIImagePickerController phải được trình bày qua UIPopoverController" Đối với iPad, bạn nên trình bày nó trong một UIPopoverController thay vì sử dụng [self presentModalViewController:picker animated:YES];. Điều này sẽ khắc phục vấn đề.

Đối với ví dụ như: -

if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad) { 
    UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:picker]; 
    [popover presentPopoverFromRect:self.view.bounds inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
    self.popover = popover; 
} else { 
    [self presentModalViewController:picker animated:YES]; 
} 

Edit: Như đã đề cập bởi @rmaddy, camera có thể được trình bày modally. Ở trên được áp dụng khi sourceTypeUIImagePickerControllerSourceTypePhotoLibrary.

+1

vâng tôi đã thử điều này nhưng nó cho thấy lý do ngoại lệ này NSInvalidArgumentException lý do: 'Applicatin đã cố gắng để trình bày một bộ điều khiển hoạt động một cách khiêm tốn' Cảm ơn rất nhiều sự giúp đỡ của bạn. – Arun

+1

Chỉ cần thử điều này một mình 'UIPopoverController * popover = [[UIPopoverController alloc] initWithContentViewController: bộ chọn]; [popover presentPopoverFromRect: self.view.bounds inView: self.view allowedArrowDirections: UIPopoverArrowDirectionAny hoạt hình: YES]; '. Và không sử dụng dòng này ở tất cả '[self presentModalViewController: bộ chọn hoạt ảnh: YES];' – iDev

+1

nó cho thấy lý do 'NSGenericException': '- [UIPopoverController dealloc] đạt được trong khi popover vẫn còn nhìn thấy được. Tôi mới làm quen với nhà phát triển ios nên tôi muốn có một số trợ giúp để cải thiện kỹ năng của mình, nơi tôi nên bắt đầu việc học, tôi chỉ cần đọc một cuốn sách 'Bắt ​​đầu phát triển ứng dụng iPad' nơi cần đi từ đây – Arun

5

@Arun tôi cũng phải đối mặt với cùng một vấn đề thêm thuộc tính chung trong tệp tiêu đề.

Tôi hy vọng các mã dưới đây là hữu ích cho bạn

UIImagePickerController *imgPicker = [[UIImagePickerController alloc] init]; 
    [imgPicker setDelegate:self]; 
    [imgPicker setSourceType:UIImagePickerControllerSourceTypePhotoLibrary]; 
    [imgPicker setAllowsEditing:YES]; 
    [imgPicker setModalPresentationStyle:UIModalPresentationCurrentContext]; 

    UIPopoverController *popOver = [[UIPopoverController alloc] initWithContentViewController:imgPicker]; 
    popOver.delegate = self; 
    self.popoverImageViewController = popOver; 
    [self.popoverImageViewController presentPopoverFromRect:CGRectMake(0, 0, 160, 40) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

Trong đó tập tin header tạo bất động sản toàn cầu như

@property (strong) UIPopoverController *popoverImageViewController; 
Các vấn đề liên quan