如下是一個UIImage
,目標路徑和圖片的文件名(要保存圖像的目錄)的方法,並且將圖像保存爲PNG文件:
-(BOOL) saveImage:(UIImage *)image savePath:(NSString *)savePath filename:(NSString *)filename{
savePath = [savePath stringByAppendingPathComponent:filename];
NSData *sourceData = UIImagePNGRepresentation(image);
return [sourceData writeToFile:savePath atomically:YES];
}
你將需要將圖像存儲在應用程序沙箱中的正確位置。例如,請勿將它們放在「文檔」文件夾中,因爲它可能會被Apple拒絕,因爲您可以重新創建(或重新下載)這些圖像。您可能希望將它們放在Library/Caches文件夾中,並準備在刪除它們時重新下載它們。有關詳細信息,請參閱iOS File System Programming Guide。
我會擔心在應用程序啓動時下載所有文件,因爲如果應用程序在下載大量圖像文件時沒有響應,它看起來應該已經凍結。您可以在後臺下載圖像,並在圖像完成下載時更新UI。
這樣做的一種方法是檢查圖像是否已被下載(例如,它是否位於Library/Caches文件夾中)。如果是,則使用它,否則使用佔位符圖像,直到下載圖像。例如:
if (isImageAvailable) {
displayedImageView.image = cachedImage;
} else {
displayedImageView.image = placeholderImage;
[self getImageAtURL:imageURL andThenDo:^(UIImage *image) {
// Replace placeholder image with downloaded image
displayedImageView.image = image;
}];
}
替換isImageAvailable
與檢查在庫/緩存文件夾中的圖像文件是否存在的方法。 displayedImageView
是您正在顯示圖像的UIImageView
。
的getImageAtURL
方法看起來是這樣的:
-(void)getImageAtURL:(NSURL *)url andThenDo:(void(^)(UIImage *image))completionBlock{
// Run on background thread
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
UIImage *image;
// Insert code to download image...
// Switch to main (UI) thread to allow updating the UI
dispatch_sync(dispatch_get_main_queue(), ^{
completionBlock(image);
});
});
}
感謝您的真棒建議!儘管我對塊不太熟悉,但會試試看。使用塊必不可少? – Moo33