面试题答案
一键面试- 获取用户访问Photo Library权限流程:
- 引入框架:在项目中引入
Photos.framework
。 - 检查权限:使用
PHPhotoLibrary
类的authorizationStatus
类方法来检查当前应用对照片库的访问权限状态。示例代码如下:
- 引入框架:在项目中引入
#import <Photos/Photos.h>
PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];
if (status == PHAuthorizationStatusNotDetermined) {
// 尚未决定权限
[PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {
// 处理授权结果
if (status == PHAuthorizationStatusAuthorized) {
// 授权成功
} else {
// 授权失败
}
}];
} else if (status == PHAuthorizationStatusAuthorized) {
// 已经授权
} else {
// 授权被拒绝或限制
}
- 将获取到的照片以列表形式展示在视图上:
- 关键类和方法:
PHFetchResult
类:用于表示符合特定条件的媒体资源集合。通过PHAsset
的类方法fetchAssetsWithOptions:
等获取照片资源的集合。例如,获取所有照片资源:
- 关键类和方法:
PHFetchOptions *options = [[PHFetchOptions alloc] init];
options.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO]];
PHFetchResult<PHAsset *> *assets = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:options];
- **`PHCachingImageManager`类**:用于高效地缓存和加载图像。通常使用`requestImageForAsset:targetSize:contentMode:options:resultHandler:`方法来获取`PHAsset`对应的图像。示例代码如下:
PHCachingImageManager *imageManager = [[PHCachingImageManager alloc] init];
CGSize targetSize = CGSizeMake(200, 200);
[imageManager requestImageForAsset:asset targetSize:targetSize contentMode:PHImageContentModeAspectFill options:nil resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
// 将result显示到视图上
}];
- 展示在视图上:
- 可以使用
UICollectionView
来展示照片列表。在UICollectionView
的cellForItemAtIndexPath:
方法中,根据PHFetchResult
中的PHAsset
获取图像并显示在UICollectionViewCell
的UIImageView
上。示例代码如下:
- 可以使用
- (UICollectionViewCell *)collectionView:(UICollectionView *)collectionView cellForItemAtIndexPath:(NSIndexPath *)indexPath {
UICollectionViewCell *cell = [collectionView dequeueReusableCellWithReuseIdentifier:@"Cell" forIndexPath:indexPath];
PHAsset *asset = self.assets[indexPath.item];
PHImageRequestOptions *options = [[PHImageRequestOptions alloc] init];
options.synchronous = YES;
[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:CGSizeMake(200, 200) contentMode:PHImageContentModeAspectFill options:options resultHandler:^(UIImage * _Nullable result, NSDictionary * _Nullable info) {
UIImageView *imageView = (UIImageView *)[cell viewWithTag:100];
imageView.image = result;
}];
return cell;
}
这里假设UICollectionViewCell
中有一个UIImageView
,其tag
为100 。同时,self.assets
是存储PHAsset
的PHFetchResult
对象。