AssetsLibrary/AssetsLibrary.h 相冊獲取

ios8.0以前獲取相冊有UIImagePicker(但是每次只能選取一張),如果需要選取多張,只能自己來自定義picker

這裏用到的框架爲AssetsLibrary.framework,資源庫,

#import <AssetsLibrary/ALAsset.h> //圖片的基本信息

#import <AssetsLibrary/ALAssetsFilter.h> //Group的過濾器,記住,只能生效一個

#import <AssetsLibrary/ALAssetsGroup.h>//獲取相冊

#import <AssetsLibrary/ALAssetsLibrary.h>//額 整個類庫的管理類吧

#import <AssetsLibrary/ALAssetRepresentation.h> //圖片的詳細信息

 

我這邊簡單的封裝了一下,大致的流程就是先獲取相冊,然後再獲取相冊中的照片,比較簡單,直接上代碼吧

- (NSMutableDictionary *)detailGroups {
    
    if (!_detailGroups) {
        _detailGroups = @{}.mutableCopy;
    }
    
    return _detailGroups;
}

- (ALAssetsLibrary *)library {
    if (!_library) {
        _library = [[ALAssetsLibrary alloc]init];
    }
    return _library;
}

- (NSMutableArray *)assesGroups {
    
    if (!_assesGroups) {
        _assesGroups = @[].mutableCopy;
    }
    
    return _assesGroups;
}

+ (LIUAsset *)shareAsset {
    
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        _shareAsset = [[LIUAsset alloc]init];
    });
    
    return _shareAsset;
}

- (void)releaseObj {
    if (_shareAsset) {
        _shareAsset = nil;
    }
}


///獲取所有的分組
- (void)getAssetsGroups:(GetAssetsGroupsBlock)assetsGroup {
    
    if (self.assesGroups.count != 0) {
        if (assetsGroup) {
            assetsGroup(self.assesGroups.copy);
            return;
        };
    }
    
    [self.library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        
        //只需要photo
        ALAssetsFilter *onlyPhotos = [ALAssetsFilter allPhotos];
        if (group) {
            
            [group setAssetsFilter:onlyPhotos];
            if ([group numberOfAssets] > 0) {
                [self.assesGroups addObject:group];
            }
            
        }else {
            //這裏本來應該是要按照*stop來判斷的,貌似調試的時候發現這個stop一直是no,但是有一個參考的是這裏的group當是最後一個的時候 會是nil,就根據這個判斷吧
            if (assetsGroup) {
                assetsGroup(self.assesGroups.copy);
                return;
            }
        }
        
    } failureBlock:^(NSError *error) {
        
    }];
    
}

///獲取分組所有的alasset
- (void)getAllAssetsByGroup:(ALAssetsGroup *)group Finish:(GetAssetsBlock)finish{
    
    NSString *groupName = [group valueForProperty:ALAssetsGroupPropertyName];
    __block NSMutableArray *allAssets = [self.detailGroups objectForKey:groupName];
    
    if (allAssets) {
        //返回數據了
        if (finish) {
            finish(allAssets.copy);
        }
        return;
    }
    //如果沒有數據
    allAssets = @[].mutableCopy;
    
    [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {

        //不知道爲什麼這裏的stop顯示不對呀
        if (result) {
            [allAssets addObject:result];
        }else {
            //先把數組保存到字典中
            [self.detailGroups setObject:allAssets forKey:groupName];
            if (finish) {
                finish(allAssets.copy);
            }
            return;
        }
        
    }];

}

///獲取全屏圖
- (UIImage *)getFullImageWitAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[[asset defaultRepresentation] fullScreenImage]];
}

///獲取縮略圖
- (UIImage *)getThumbImageWithAsset:(ALAsset *)asset {
    return [UIImage imageWithCGImage:[asset thumbnail]];
}

ios 8以後,蘋果就捨棄了這個類庫,新建了一個photos類,下次有空再整理一下這個類庫的 

發佈了24 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章