如何将照片库或相机中的图像添加到我的Ipad应用程序? [英] how to add image from photo library or camera to my Ipad application?

查看:118
本文介绍了如何将照片库或相机中的图像添加到我的Ipad应用程序?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想从照片库或使用相机添加图像到我的ipad应用程序。我使用了与iphone相同的编码。但是应用程序崩溃了。我认为这不是从库添加图片到ipad应用程序的正确方法。如果有人知道请帮帮我。

I want to add images from photo library or by using camera to my ipad application. I had used same coding as iphone . But the application is crashing. I think this is not the right way to add picture from library to ipad application. If anyone knows please help me.

-(void)ctnPhotoSelection
{
    isMyCtView = YES;
    UIActionSheet *actionSheet = [[UIActionSheet alloc] initWithTitle:@""
                                                             delegate:self cancelButtonTitle:nil destructiveButtonTitle:nil
                                                    otherButtonTitles:@"Take Photo With Camera", @"Select Photo From Library", @"Cancel", nil];
    actionSheet.actionSheetStyle = UIActionSheetStyleAutomatic;
    actionSheet.destructiveButtonIndex = 1; 
    [actionSheet showInView:self.view]; 
    [actionSheet release];
}

- (void)actionSheet:(UIActionSheet *)actionSheet clickedButtonAtIndex:(NSInteger)buttonIndex
{
    if (buttonIndex == 0)
    {
        [self TakePhotoWithCamera];
    }   
    else if (buttonIndex == 1)
    {
        [self SelectPhotoFromLibrary];
    }

    else if (buttonIndex == 2)
    {
        NSLog(@"cancel");
    }
}

-(void) TakePhotoWithCamera
{
    [self startCameraPickerFromViewController:self usingDelegate:self];
}

-(void) SelectPhotoFromLibrary
{
    [self startLibraryPickerFromViewController:self usingDelegate:self];
}

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

- (BOOL)startCameraPickerFromViewController:(UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate>)delegateObject  
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
    {
        UIImagePickerController *picker = [[UIImagePickerController alloc] init];
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
        picker.allowsEditing = YES;
        picker.delegate = self;
        [controller presentModalViewController:picker animated:YES];
        [picker release];
    }
    return YES;  
}  

- (BOOL)startLibraryPickerFromViewController:(UIViewController*)controller usingDelegate:(id<UIImagePickerControllerDelegate>)delegateObject  
{
    if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) 
    {
        UIImagePickerController *picker1 = [[UIImagePickerController alloc]init];
        picker1.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        picker1.allowsEditing = YES;
        picker1.delegate = self;
        [controller presentModalViewController:picker1 animated:YES];
        [picker1 release];
    }
    return YES;  
}

- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
{   
    UIImage * img = [info objectForKey:@"UIImagePickerControllerEditedImage"];
    [self useImage:img];
    [[picker parentViewController] dismissModalViewControllerAnimated:NO];
    UINavigationController* navController = self.navigationController;
    UIViewController* controller = [navController.viewControllers objectAtIndex:0];
    [controller dismissModalViewControllerAnimated:NO];
}

-(void)useImage:(UIImage *)theImage
{
    NSData *addImageData = UIImagePNGRepresentation(theImage);
    IpadAppDelegate *appDelegate=(IpadAppDelegate*)[ [UIApplication sharedApplication] delegate];

    if(isMyCtView == YES)
    {
        isMyCtView = NO;
        appDelegate.imageCtData = addImageData;
        appDelegate.isctFromDevice = YES;
        appDelegate.isctnCntrl = YES;
        [self.view sendSubviewToBack:myCtnView];
    }

    [self reloadView];
}

崩溃日志

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be presented via UIPopoverController'
*** Call stack at first throw:
(
 0   CoreFoundation                      0x3587a987 __exceptionPreprocess + 114
 1   libobjc.A.dylib                     0x34a8249d objc_exception_throw + 24
 2   UIKit                               0x34378317 UIImagePickerEnsureViewIsInsidePopover + 258
 3   PhotoLibrary                        0x3499893b -[PLLibraryView didMoveToWindow] + 86
 4   UIKit                               0x341bf76b -[UIView(Internal) _didMoveFromWindow:toWindow:] + 698
 5   UIKit                               0x341bf583 -[UIView(Internal) _didMoveFromWindow:toWindow:] + 210
 6   UIKit                               0x341bf433 -[UIView(Hierarchy) _postMovedFromSuperview:] + 106
 7   UIKit                               0x341aa82f -[UIView(Internal) _addSubview:positioned:relativeTo:] + 678
 8   UIKit                               0x341aa57f -[UIView(Hierarchy) addSubview:] + 22
 9   UIKit                               0x341fc8a9 -[UINavigationTransitionView transition:fromView:toView:] + 416
 10  UIKit                               0x341fc6fd -[UINavigationTransitionView transition:toView:] + 20
 11  UIKit                               0x341ef8cf -[UINavigationController _startTransition:fromViewController:toViewController:] + 1274
 12  UIKit                               0x341ef35f -[UINavigationController _startDeferredTransitionIfNeeded] + 182
 13  UIKit                               0x341ef2a3 -[UINavigationController viewWillLayoutSubviews] + 14
 14  UIKit                               0x341ef23f -[UILayoutContainerView layoutSubviews] + 138
 15  UIKit                               0x341b80cf -[UIView(CALayerDelegate) layoutSublayersOfLayer:] + 26
 16  CoreFoundation                      0x35818bbf -[NSObject(NSObject) performSelector:withObject:] + 22
 17  QuartzCore                          0x31075685 -[CALayer layoutSublayers] + 120
 18  QuartzCore                          0x3107543d CALayerLayoutIfNeeded + 184
 19  QuartzCore                          0x3106f56d _ZN2CA7Context18commit_transactionEPNS_11TransactionE + 212
 20  QuartzCore                          0x3106f383 _ZN2CA11Transaction6commitEv + 190
 21  QuartzCore                          0x31092f9d _ZN2CA11Transaction17observer_callbackEP19__CFRunLoopObservermPv + 52
 22  CoreFoundation                      0x3580ac59 __CFRUNLOOP_IS_CALLING_OUT_TO_AN_OBSERVER_CALLBACK_FUNCTION__ + 16
 23  CoreFoundation                      0x3580aacd __CFRunLoopDoObservers + 412
 24  CoreFoundation                      0x358020cb __CFRunLoopRun + 854
 25  CoreFoundation                      0x35801c87 CFRunLoopRunSpecific + 230
 26  CoreFoundation                      0x35801b8f CFRunLoopRunInMode + 58
 27  GraphicsServices                    0x320c84ab GSEventRunModal + 114
 28  GraphicsServices                    0x320c8557 GSEventRun + 62
 29  UIKit                               0x341dc329 -[UIApplication _run] + 412
 30  UIKit                               0x341d9e93 UIApplicationMain + 670
 31  IpadComicBuilder                    0x00002537 main + 70
 32  IpadComicBuilder                    0x000024b8 start + 52
)
terminate called after throwing an instance of 'NSException'
Program received signal:  "SIGABRT".
warning: Unable to read symbols for /Developer/Platforms/iPhoneOS.platform/DeviceSupport/4.2.1 (8C148)/Symbols/Developer/usr/lib/libXcodeDebuggerSupport.dylib (file not found).
(gdb)


推荐答案

答案是您的错误消息。

Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'On iPad, UIImagePickerController must be presented via UIPopoverController'

在iPad上,您不能只使用iPhone方法选择图像。您需要使用 UIPopoverController ,你可以用你的UIImagePickerController传递它:

On an iPad, you can't just use the iPhone method of selecting an image. You need to use a UIPopoverController, you can pass it your UIImagePickerController with:

UIPopoverController * popover = [[UIPopoverController alloc] initWithContentViewController:imagePicker];

然后实施 UIPopoverControllerDelegate 协议。

你可以找到一个例子此处

这篇关于如何将照片库或相机中的图像添加到我的Ipad应用程序?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆