在這裏用塊和ALAssetLibrary例程苦苦掙扎。我已經瀏覽了WWDC和斯坦福大學的視頻片段,並閱讀了一些內容,但還沒有完全點擊我。通過專輯名稱獲取ALAssetsGroupAlbum的posterImage
我想要做的是獲取自定義照片庫的posterImage。下面的第一個例程位於我的主視圖控制器中,並調用功能getPosterImageForAlbum:
,它位於ALAssetLibrary類擴展中。
我與/迷茫掙扎的東西約/曾嘗試:
我應該傳遞一個參考(CGImageRef或UIImage的),並有 ALAssetLibrary方法對其進行設置或定義爲一個返回值 ALAssetLibrary方法,然後處理我的主類中的圖像? 我試過這兩種方式沒有成功。
ALAssetLibrary枚舉方法的異步性質是 很難處理 - 所以我想我做錯了。
定義一個塊作爲參數傳遞:我總是需要 typedef它嗎?
我認爲我已經掌握了所有的概念零件和零件,但我還沒有能夠將它們與對塊的工作理解清楚。任何提示或指針*以良好的文章將不勝感激。 //
- (IBAction)getPosterImage:(id)sender {
NSString *groupName = self.groupNameField.text;
NSLog(@"%@", groupName);
__weak typeof(self) weakSelf = self;
CGImageRef tmpImg = [weakSelf.library getPosterImageForAlbum:groupName withCompletionBlock:(CGImageRef)(^GetPosterImageCompletion)(NSError *error){
if (error!=nil) {
NSLog(@"getPosterImage error: %@", [error description]);
} else {
if (tmpImg != nil){
UIImage * posterImg = [UIImage imageWithCGImage:tmpImg];
weakSelf.pImage.image = posterImg;
}
}
}];
}
//這是的ALAssetLibrary
typedef CGImageRef(^GetPosterImageCompletion)(NSError* error);
-(CGImageRef)getPosterImageForAlbum:(NSString*)albumName
withCompletionBlock:(GetPosterImageCompletion)completionBlock
{
__block BOOL albumWasFound = NO;
__block CGImageRef thePosterImage = nil;
SaveImageCompletion test;
//search all photo albums in the library
[self enumerateGroupsWithTypes:ALAssetsGroupAlbum
usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
NSLog(@"this group name: %@",
[group valueForProperty:ALAssetsGroupPropertyName]);
//compare the names of the albums
if ([albumName compare:
[group valueForProperty:ALAssetsGroupPropertyName]]==NSOrderedSame) {
printf("matches \n"); //target album is found
albumWasFound = YES;
thePosterImage = group.posterImage;
*stop = true;
return ;
}
} failureBlock: test];
if (albumWasFound==NO) {
NSLog(@"%@", @"No group found");
}
return thePosterImage;
}
嘿謝謝花時間!第二款咖啡開始使用後,我必須咀嚼這些東西。我只使用了類擴展,因爲我開始使用一些教程代碼(許多代碼編寫的代碼都是通過代碼清除的) –