I think this is because in iOS 8, alert views and action sheets are actually presented view controllers (UIAlertController). So, if you're presenting a new view controller in response to an action from the UIAlertView, it's being presented while the UIAlertController is being dismissed. I worked around this by delaying the presentation of the UIImagePickerController until the next iteration of the runloop, by doing this:
[[NSOperationQueue mainQueue] addOperationWithBlock:^{ // just add picker code here and it will work fine. }];
- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex { [[NSOperationQueue mainQueue] addOperationWithBlock:^{ if (buttonIndex==0) { if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { NSArray *media = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypeCamera]; if ([media containsObject:(NSString*)kUTTypeImage] == YES) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypeCamera; [picker setMediaTypes:[NSArray arrayWithObject:(NSString *)kUTTypeImage]]; picker.delegate = (id)self; [self presentViewController:picker animated:YES completion:nil]; } } else { UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Unsupported!" message:@"Camera does not support photo capturing." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil]; [alert show]; } } else if (buttonIndex==1) { if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { NSArray *media = [UIImagePickerController availableMediaTypesForSourceType: UIImagePickerControllerSourceTypePhotoLibrary]; if ([media containsObject:(NSString*)kUTTypeImage] == YES) { UIImagePickerController *picker = [[UIImagePickerController alloc] init]; picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; [picker setMediaTypes:[NSArray arrayWithObject:(NSString *)kUTTypeImage]]; picker.delegate = (id)self; [self presentViewController:picker animated:YES completion:nil]; } } else { [msgDic setValue:@"Sorry" forKey:@"title"]; [msgDic setValue:@"Your device doesn't posses Photo Library." forKey:@"message"]; [self performSelectorOnMainThread:@selector(showAlert:) withObject:msgDic waitUntilDone:NO]; } } }]; }
Here is the SO answer.
so many thanks to you . it is realy help full. er.ravindrapal@gmail.com
ReplyDelete