2012-03-03 39 views
18

Tôi sẽ hỏi một câu hỏi có thể đã được hỏi một triệu lần.Chọn nhiều ảnh từ Thư viện ảnh

Tôi đang tạo ứng dụng cho iPad và muốn cung cấp cho người dùng khả năng chọn nhiều hình ảnh từ thư viện ảnh của họ. Tôi đã có một mã làm việc cho người dùng để chọn một hình ảnh tại một thời điểm. (không phải những gì tôi cần)

Tôi đã tải xuống và xem mã mẫu chọn hình ảnh ELC nhưng mã đó không tương thích với iOS 5 hoặc Xcode 4. tức là nó có ARC và biên dịch các vấn đề trái và phải, bản phát hành sử dụng và dealloc khắp nơi.

Tôi chỉ cảm thấy thất vọng khi Apple chưa tạo một bản dựng sẵn cho các nhà phát triển cho chức năng được yêu cầu phổ biến nhất này trong hầu hết các ứng dụng iPhone/iPad của chúng tôi. (không phải một bức ảnh nhưng đa lựa chọn)

Có sẵn mã mẫu nào khác không? Tin tôi đi, tôi đã googling một lúc.

+5

Chuyển đổi sang ARC không khó .. –

Trả lời

21

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]; 
+0

Xin chào ... thay vì chọn ảnh từ thư viện ảnh, tôi muốn chọn ảnh từ thư mục ứng dụng riêng tư. Câu hỏi của tôi là bộ điều khiển bộ chọn ELCImage có nghĩa là để chọn nhiều hình ảnh chỉ từ thư viện ảnh hoặc nó có thể được thực hiện cho thư mục ứng dụng riêng tư không? –

+2

Cảm ơn bạn đã sử dụng mã ur tôi có thể tùy chỉnh bộ điều khiển uiimagepickerview. Bây giờ tôi muốn cho người dùng biết rằng một bức ảnh đã được chọn từ imagepicker bởi hình ảnh samll ở góc phải của hình ảnh như thế nào để làm điều đó. Bất kỳ trợ giúp nào .. – srividya

+0

Xin chào, bạn có thể giúp tôi cập nhật thiết kế hình ảnh đã chọn trong UIImagePickerController không? – Iya

9

Apple đã cung cấp api cho việc này. Nó được gọi là ALAssetsLibrary.

Sử dụng tính năng này, bạn có thể chọn nhiều hình ảnh/video và các hoạt động khác mà bạn sử dụng ứng dụng ảnh trên thiết bị iOS.

Như trong documentation Apple nói:

Tài sản Thư viện Khung

Giới thiệu trong iOS 4.0, các tài sản Thư viện khuôn khổ (AssetsLibrary.framework) cung cấp một giao diện truy vấn có trụ sở tại ảnh và video lấy từ thiết bị của người dùng. Sử dụng khung công tác này, bạn có thể truy cập vào cùng một nội dung thường được quản lý bởi ứng dụng Ảnh, bao gồm các mục trong ảnh đã lưu của người dùng album và mọi ảnh và video đã được nhập vào thiết bị. Bạn cũng có thể lưu ảnh và video mới về anbom ảnh của người dùng đã lưu.

Dưới đây là một số liên kết mà bạn có thể tìm hiểu thêm. Bây giờ để sử dụng nó, bạn có thể tìm kiếm ALAssetsLibrary.

Assets Library Reference

http://www.fiveminutes.eu/accessing-photo-library-using-assets-library-framework-on-iphone/

1

ALAssetsLibrary và cuộn giao diện người dùng của riêng mình. Vấn đề với UIImagePickerController là nó nói bạn có nghĩa vụ phải loại bỏ bộ điều khiển xem trong cuộc gọi lại didFinishPickingMediaWithInfo, do đó, hack nhiều lựa chọn bằng cách không loại bỏ có thể chạy vào các vấn đề. Tôi biết tôi đã làm khi lần đầu tiên tôi thử nó. Tôi không thể nhớ chính xác những gì đã đi sai, nhưng có những trường hợp mà UIImagePickerController chỉ đơn giản là ngừng làm việc nếu tôi không bỏ qua nó như các tài liệu nói.

Các vấn đề liên quan