Ok, tôi đã tìm ra này. Vấn đề với Thư viện tài sản là nó cung cấp cho bạn tất cả dữ liệu GEO của hình ảnh. Điều đó có nghĩa là đối với người dùng sử dụng ứng dụng của bạn là họ sẽ nhận được thông báo nhắc rằng ứng dụng của bạn đang cố gắng truy cập vị trí của họ. Infact tất cả những gì bạn đang cố gắng làm là cho phép họ chọn nhiều hình ảnh từ album ảnh của họ. Hầu hết người dùng sẽ bị tắt suy nghĩ về vấn đề vi phạm bản quyền. Cách tiếp cận tốt nhất là sử dụng applet api của imagePickerController. Tôi biết nó cho phép bạn chọn một pic tại một thời điểm nhưng nếu bạn thêm mã sau đây, nó sẽ cho phép bạn chọn nhiều hình ảnh.
Cách tôi đang làm là cho phép người dùng tiếp tục chọn ảnh họ muốn, tiếp tục lưu các tệp đó trong thư mục tài liệu ứng dụng, cho đến khi họ nhấn nút xong. Xem ở đây mã mẫu của tôi và hy vọng nó sẽ giúp bạn tiết kiệm được nỗi đau khi trải qua Thư viện Tài sản
-(IBAction)selectExitingPicture
{
//Specially for fing iPAD
UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init];
imagePicker.delegate = self;
imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
imagePicker.mediaTypes = [NSArray arrayWithObject:(NSString *)kUTTypeImage];
popoverController = [[UIPopoverController alloc] initWithContentViewController:imagePicker];
[popoverController presentPopoverFromRect:CGRectMake(0.0, 0.0, 400.0, 300.0)
inView:self.view
permittedArrowDirections:UIPopoverArrowDirectionAny
animated:YES];
}
//Done button on top
- (void)navigationController:(UINavigationController *)navigationController
willShowViewController:(UIViewController *)viewController
animated:(BOOL)animated
{
//NSLog(@"Inside navigationController ...");
if (!doneButton)
{
doneButton = [[UIBarButtonItem alloc] initWithTitle:@"Done"
style:UIBarButtonItemStyleDone
target:self action:@selector(saveImagesDone:)];
}
viewController.navigationItem.rightBarButtonItem = doneButton;
}
- (IBAction)saveImagesDone:(id)sender
{
//NSLog(@"saveImagesDone ...");
[popoverController dismissPopoverAnimated:YES];
}
-(void)imagePickerController:(UIImagePickerController *)picker
didFinishPickingImage : (UIImage *)image
editingInfo:(NSDictionary *)editingInfo
{
//DONT DISMISS
//[picker dismissModalViewControllerAnimated:YES];
//[popoverController dismissPopoverAnimated:YES];
IMAGE_COUNTER = IMAGE_COUNTER + 1;
imageView.image = image;
// Get the data for the image
NSData* imageData = UIImageJPEGRepresentation(image, 1.0);
// Give a name to the file
NSString* incrementedImgStr = [NSString stringWithFormat: @"UserCustomPotraitPic%d.jpg", IMAGE_COUNTER];
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString* documentsDirectory = [paths objectAtIndex:0];
// Now we get the full path to the file
NSString* fullPathToFile2 = [documentsDirectory stringByAppendingPathComponent:incrementedImgStr];
// and then we write it out
[imageData writeToFile:fullPathToFile2 atomically:NO];
}
// Bây giờ hãy sử dụng mã này để chuyển đến hình ảnh đã chọn của người dùng.Gọi nó từ bất cứ nơi nào bạn muốn trong mã của mình
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask ,YES);
NSString* documentsPath = [paths objectAtIndex:0];
NSString* dataFile = [documentsPath stringByAppendingPathComponent:@"UserCustomPotraitPic1.jpg"];
NSData *potraitImgData = [NSData dataWithContentsOfFile:dataFile];
backgroundImagePotrait = [UIImage imageWithData:potraitImgData];
Nguồn
2012-03-04 19:58:13
Chuyển đổi sang ARC không khó .. –