在實做此方法之前,假設在裝置的圖庫中已經存有影像,如果您是使用模擬器來練習本教學,可以先參考將影像存至圖庫 Library 的方法一文,在圖庫中建立數張影像之後再實做本教學的方法。
由於示範中有使用到 UIImagePickerController 所以我們要在 ViewController 的地方加上 UIImagePickerControllerDelegate 和 UINavigationControllerDelegate 的代理,其程式碼如下。
@interface GettingPhotoViewController : UIViewController <UIImagePickerControllerDelegate, UINavigationControllerDelegate> {
}
接著在取得影像的按鈕事件下,鍵入以下程式碼顯來示圖庫內的所有影像。
- (IBAction)getImagefromLibrary:(id)sender {
//宣告一個UIImagePickerController並設定代理
UIImagePickerController *picker = [[UIImagePickerController alloc] init];
picker.delegate = self;
//設定圖片來源為圖庫
picker.sourceType = UIImagePickerControllerSourceTypeSavedPhotosAlbum;
//以動畫方式顯示圖庫
[self presentModalViewController:picker animated:YES];
}
程式碼到此已經可以正常顯示圖庫內的所有影像,但是當我們點選影像時 UIImagePickerController 並不會對此動作做出任何反應,因為我們還沒有告訴它在點選這些影像之後該做些什麼。
回到程式碼,補上一個內建函式,此函式會在使用者點選圖庫內的影像時才被觸發,並且在函式中實做出設定影像與返回畫面的動作,程式碼如下。
//UIImagePickerController內建函式
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo {
//設定影像
[imageView setImage:image];
//已動畫方式返回先前畫面
[picker dismissModalViewControllerAnimated:YES];
}
您好,
回覆刪除我發現如果用iPad模擬器的話,
不會觸發- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(NSDictionary *)editingInfo 這個內建涵式?
但如果是在iPhone模擬器就正常運作.
另外我用iPad實機執行的時候,打開相簿之後,中間原本應該顯示照片的地方卻全部都是黑色,一片黑色,非常的納悶.
想請教您是否有遇過類似的狀況?
謝謝
您好:
回覆刪除在我沒有遇過黑色的情況,如果你存放的是一張透明背景的圖片,那底色就會是黑色,會不會是圖片存取失敗造成的。
在ipad下要使用 UIPopoverController 才可以
UIPopoverController *popover = [[UIPopoverController alloc] initWithContentViewController:你的iimagePicker];
self.popoverController = popover;
popoverController.delegate = self;
[popoverController presentPopoverFromRect:CGRectMake(0, 0, 300, 300) inView:self.view permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES];
你試試看吧。
您好,
回覆刪除想請問在實機上,可不可以把gallery中的photo刪除呢?
若無法刪除,可不可以用其他image覆蓋掉photo呢?
謝謝
您好:
刪除目前我沒有發現可以使用API來刪除像簿中的圖片,市面上的APP好像也沒有類似功能,大部分都是將處理完的圖片再多存一張至相簿,也只有官方的相片檢視可以在編輯完成後直接覆蓋掉原本的相片。
通樣問題也無法覆蓋。不過或許可以透過一些小技巧來達成,只是不缺ˋ定能不能上您的APP上架就是了,你可以參考下面這些文章取得檔案名稱並加以刪除/覆蓋。
使用 ALAssetsGroup 列舉裝置相簿中的所有資料
http://furnacedigital.blogspot.tw/2012/12/alassetsgroup.html
使用 AssetsLibrary 取得圖庫中檔案的相關資訊
http://furnacedigital.blogspot.tw/2012/12/assetslibrary.html
將影像存至相簿 Album 的方法
http://furnacedigital.blogspot.tw/2011/04/library.html
您好,謝謝您的回覆
刪除參考連結內容後,我改寫了以下內容
------
UIImage *imageReplace= [UIImage imageNamed:@"000.jpg"];
NSURL *imageURL = [info valueForKey:UIImagePickerControllerReferenceURL];
ALAssetsLibrary* assetslibrary = [[ALAssetsLibrary alloc] init];
//[assetslibrary assetForURL:imageURL resultBlock:resultBlock failureBlock:failureBlock];
[assetslibrary assetForURL:imageURL resultBlock:^(ALAsset *asset)
{
[asset setImageData:UIImageJPEGRepresentation(imageReplace, 1.0) metadata:nil completionBlock:^(NSURL *assetURL, NSError *error)
{
}];
} failureBlock:failureBlock];
------
但這樣還是無法覆蓋掉原本的image
請問這樣的思考方向是對的嗎?或是有其他的建議
謝謝
你好:
刪除給您看看,stackoverflow的回答
http://stackoverflow.com/questions/21477463/delete-images-from-ios-photo-gallery
您好
刪除我會再參考 https://developer.apple.com/library/ios/documentation/Photos/Reference/PHAssetChangeRequest_Class/
謝謝您
您好:
刪除我才要謝謝你,PHAssetChangeRequest 我以前還真的沒看過。