在 iPhone 模拟器上使用 UIImagePickerController

6
我有一个方法,可以从相册或相机中获取照片。
-(IBAction) getPhoto:(id) sender {
  UIImagePickerController * picker = [[UIImagePickerController alloc] init];
  picker.delegate = self;

  if((UIButton *) sender == choosePhotoBtn) {
        picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
  } else {
        picker.sourceType = UIImagePickerControllerSourceTypeCamera;
  }

  [self presentModalViewController:picker animated:YES];
}

但是当我在模拟器上运行它时,代码无法正常工作。并且在 picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbumpicker.sourceType = UIImagePickerControllerSourceTypeCamera 中也无法正常工作。

问题是出现在模拟器还是代码中?


1
这是答案:http://stackoverflow.com/questions/833210/iphone-no-saved-photo-album-created-on-iphone - Raptor
1
你正在使用 iPhone 模拟器还是 iPad 模拟器? - Krrish
iPhone模拟器。我将“UIImagePickerControllerSourceTypeSavedPhotosAlbum”更改为“UIImagePickerControllerSourceTypePhotoLibrary”,但是库为空,应该在哪里添加照片,以便在应用程序中使用它们? - Eugene Trapeznikov
是的,这是因为您正在使用模拟器。 - Elijah Murray
4个回答

9

请尝试以下方法,

 if([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary])
        {
            picker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
        }
        else
        {
            picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
        }
        [self.navigationController presentModalViewController:picker animated:NO];

如果你正在为iPad创建应用程序,你将需要在一个弹出控件中展示画廊。


[self.navigationController presentModalViewController:picker animated:NO] - 不起作用,但是 [self presentModalViewController:picker animated:YES] 是可以的。关于 sourceType,我有同样的问题。为什么 UIImagePickerControllerSourceTypePhotoLibrary 是空的?在运行应用程序之前应该如何添加照片? - Eugene Trapeznikov

2

Swift 3/4/5 版本:

if UIImagePickerController.isSourceTypeAvailable(.camera) {
    picker.sourceType = .camera
}
else {
    picker.sourceType = .savedPhotosAlbum // or .photoLibrary
}

Swift 2版本:

if UIImagePickerController.isSourceTypeAvailable(.Camera) {
    picker.sourceType = .Camera
}
else {
    picker.sourceType = .SavedPhotosAlbum // or .PhotoLibrary
}

在模拟器中,你无法使用 cameraCaptureModeshowsCameraControls。请注意,这是一种技术术语,涉及到IT领域的相关知识。

1
在模拟器中,当您的选择器.sourceType = UIImagePickerControllerSourceTypeCamera时,由于模拟器中没有可用的相机,因此不会被调用。另外,检查源类型是否可用以避免崩溃是一个好习惯。
#import <MobileCoreServices/UTCoreTypes.h>
….
 if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera])
        {
            UIImagePickerController *imagePickerCamera =[[UIImagePickerController alloc] init];
            imagePickerCamera.delegate = self;
            imagePickerCamera.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
            imagePickerCamera.allowsEditing = YES;
            imagePickerCamera.sourceType = UIImagePickerControllerSourceTypeCamera;

            [self presentViewController:imagePickerCamera  animated:YES completion:nil];
        }

    else if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeSavedPhotosAlbum])
        {
            UIImagePickerController *imagePickerAlbum =[[UIImagePickerController alloc] init];
            imagePickerAlbum.delegate = self;
            imagePickerAlbum.mediaTypes = [NSArray arrayWithObjects:(NSString *) kUTTypeImage,nil];
            imagePickerAlbum.allowsEditing = YES;
            imagePickerAlbum.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;

            [self presentViewController:imagePickerAlbum animated:YES completion:nil];
        }

请查看此链接 - https://developer.apple.com/library/ios/#documentation/UIKit/Reference/UIImagePickerController_Class/UIImagePickerController_Class.pdf - Meera

0
与上面的答案类似,但我发现这更容易。如果设备没有相机(如模拟器),则显示弹出警报。相同代码,不同用途:
//button if to take a photo
- (IBAction)takePhoto:(id)sender {

//checks if device has a camera
    if (![UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) {
        UIAlertView *noCameraAlert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"You don't have a camera for this device" delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil, nil];

        //shows above alert if there's no camera
        [noCameraAlert show];
    }

    //otherwise, show a modal for taking a photo
    else {
        UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
        imagePicker.delegate = self;
        imagePicker.allowsEditing = YES;
        imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera;

        [self presentViewController:imagePicker animated:YES completion:NULL];
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接