2017-12-07 19 views
0

Photos Framework을 사용하려고합니다. 내 collectionViewCamera RollPersonal albums 포스터 이미지를 표시하고 싶습니다.Moment 앨범과 내 개인 앨범을 collectionView에 가져 오는 방법은 무엇입니까?

나는이 방법으로 코드를 구현하려고하지만 여전히 각 앨범마다 동일한 이미지가 표시됩니다. 어디에서 잘못 했습니까? 당신이 당신의 모든 인덱스에 대해 동일한 자산을 요구하고 있기 때문에 여기에

내 코드를 삽입 ... 나는 누군가가 나에게

//USER ALBUM 
@property (nonatomic, strong) PHFetchResult *userAlbum; 
@property (nonatomic, strong) PHAssetCollection *assetCollection; 
@property (nonatomic, strong) PHAsset *asset; 


-(void)viewDidLoad { 
    [super viewDidLoad]; 

    PHFetchOptions *userAlbumsOptions = [[PHFetchOptions alloc] init]; 
    userAlbumsOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:YES]]; 

    self.userAlbum = [PHAssetCollection fetchAssetCollectionsWithType:PHAssetCollectionTypeAlbum | PHAssetCollectionTypeMoment subtype:PHAssetCollectionSubtypeAlbumRegular options:nil]; 

    for (NSInteger i =0; i < self.userAlbum.count; i++) { 
     self.assetCollection = [self.userAlbum objectAtIndex:i]; 
     NSLog(@"%@",[self.assetCollection.localizedTitle uppercaseString]); 

     PHFetchResult *fetchResult = [PHAsset fetchKeyAssetsInAssetCollection:self.assetCollection options:nil]; 
     self.asset = [fetchResult firstObject]; 
} 
} 

-(NSInteger)collectionView:(UICollectionView *)collectionView numberOfItemsInSection:(NSInteger)section { 
    return self.userAlbum.count; 
} 


-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath { 

     KCCategoryCell *catCell = [collectionView dequeueReusableCellWithReuseIdentifier:categoryCellID forIndexPath:indexPath]; 

     CGFloat retina = [UIScreen mainScreen].scale; 
     CGSize square = CGSizeMake(catCell.albumImage.bounds.size.width * retina, catCell.bounds.size.height * retina); 

     [[PHImageManager defaultManager] requestImageForAsset:self.asset targetSize:square contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
       catCell.albumImage.image = result; 
     }]; 

     return catCell; 
} 

답변

1

왜 같은 이미지를보고있는에 그 이유를 도울 수 있기를 바랍니다입니다 :

-(UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(nonnull NSIndexPath *)indexPath { 

    KCCategoryCell *catCell = [collectionView dequeueReusableCellWithReuseIdentifier:categoryCellID forIndexPath:indexPath]; 

    CGFloat retina = [UIScreen mainScreen].scale; 
    CGSize square = CGSizeMake(catCell.albumImage.bounds.size.width * retina, catCell.bounds.size.height * retina); 

    [[PHImageManager defaultManager] requestImageForAsset:self.asset // <-- Right here 
               targetSize:square contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
     catCell.albumImage.image = result; 
    }]; 

    return catCell; 
} 

그래서 그 대신 것을 일의 다음을 수행하십시오

1) 변경 @property (nonatomic, strong) PHAsset *asset;-@property (nonatomic, strong) PHFetchResult *assets;

2) 대신이 일을 :

PHFetchResult *fetchResult = [PHAsset fetchKeyAssetsInAssetCollection:self.assetCollection options:nil]; 
self.asset = [fetchResult firstObject]; 

는이 작업을 수행 :

self.assets = [PHAsset fetchKeyAssetsInAssetCollection:self.assetCollection options:nil]; 

3) 마지막으로, 대신이 일을 :

[[PHImageManager defaultManager] requestImageForAsset:self.asset 
              targetSize:square contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
    catCell.albumImage.image = result; 
}]; 

이를 수행

[[PHImageManager defaultManager] requestImageForAsset:self.assets[indexPath.row] 
              targetSize:square contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) { 
    catCell.albumImage.image = result; 
}]; 

녹음하기 ap :

모든 셀에 대해 동일한 이미지 (self.asset)를 반복해서 가져오고 있습니다. 따라서 모든 자산에 대해 속성을 만들고 올바른 셀에 적합한 자산을 가져옵니다.

+0

크래시와 나는 왜 모르겠다 – kAiN

+0

어떤 종류의 충돌 ..? – COOKIES

+1

어리석은 오류 ... 해결 ... 실례합니다 ... 당신의 대답은 정확합니다! .. 지원해 주셔서 감사합니다 !!! – kAiN