iOS中如果我们只有一次读取一张图片或者一个视频(或拍一张照片/视频)的需求,那么我们用 UIImagePickerController 就可以搞定。但是很多时候我们需要一次性从PhotoLibrary读取多个照片或者视频,这时候我们就需要另辟蹊径了,好在apple为我们提供了相应的接口。
在开始coding之前我们想要认识几个类:
ALAssetsLibrary:代表整个PhotoLibrary,我们可以生成一个它的实例对象,这个实例对象就相当于是照片库的句柄。
ALAssetsGroup:照片库的分组,我们可以通过ALAssetsLibrary的实例获取所有的分组的句柄。
ALAsset:一个ALAsset的实例代表一个资产,也就是一个photo或者video,我们可以通过他的实例获取对应的subnail或者原图等等。
还需要了解的一个东东就是blocks,apple在iOS 4.0以后大量出现了这玩意儿,有使用越来越广的意思,不过这玩意儿确实好用。关于这玩意儿的内容我在这里不多讲,关注我的博客我会细讲。
对于本文的需求,我们读取group和每个asset都是异步的,但是我们现在用blocks我们可以在一个函数里面搞定。所以blocks确实很方便。
下面直接看代码吧:
- ALAssetsLibrary *assetsLibrary = [[ALAssetsLibrary alloc]init];//生成整个photolibrary句柄的实例
- NSMutableArray *mediaArray = [[NSMutableArray alloc]init];//存放media的数组
- [assetsLibrary enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {//获取所有group
- [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {//从group里面
- NSString* assetType = [result valueForProperty:ALAssetPropertyType];
- if ([assetType isEqualToString:ALAssetTypePhoto]) {
- NSLog(@"Photo");
- }else if([assetType isEqualToString:ALAssetTypeVideo]){
- NSLog(@"Video");
- }else if([assetType isEqualToString:ALAssetTypeUnknown]){
- NSLog(@"Unknow AssetType");
- }
- NSDictionary *assetUrls = [result valueForProperty:ALAssetPropertyURLs];
- NSUInteger assetCounter = 0;
- for (NSString *assetURLKey in assetUrls) {
- NSLog(@"Asset URL %lu = %@",(unsigned long)assetCounter,[assetUrls objectForKey:assetURLKey]);
- }
- NSLog(@"Representation Size = %lld",[[result defaultRepresentation]size]);
- }];
- } failureBlock:^(NSError *error) {
- NSLog(@"Enumerate the asset groups failed.");
- }];
剩下的就是怎么从每个asset获取相应的subnail或者原图或者其他信息了。It's very easy.
相关推荐
本文将深入探讨如何在iOS中读取照片库以及保存图片或视频到照片库的关键点,主要涉及的类有`UIImagePickerController`、`ALAssetsLibrary`、`ALAssetsGroup`和`ALAsset`。 首先,`UIImagePickerController`是苹果...
类似读取照片,但需要指定`PHAssetMediaType`为`.video`。加载视频时,通常需要使用`AVPlayer`或`MPMoviePlayerController`来播放。 1. **获取视频资产**: ```swift let videoAssets = PHAsset.fetchAssets(with...
在iOS中,读取相册通常涉及使用 Photos Framework。这个框架提供了访问用户设备上照片和视频的能力,包括选择特定相册、获取图片元数据以及显示预览等。通过PHPhotoLibrary类,开发者可以请求用户授权访问他们的相册...
总之,要在Unity中实现从iOS相册读取图片并显示,需要跨平台编程知识,包括Unity的C#、Objective-C/Swift以及iOS系统的照片库API。在调试过程中,注意版本兼容性、权限请求和数据交换的正确性是关键。
Swift-Location-Cleaner是一个专门为iOS设备设计的应用程序,旨在帮助用户清除其照片库中的照片和视频的定位信息。这一工具的出现是为了防止未经授权的第三方应用获取并利用这些敏感的地理数据。 Swift作为Apple的...
在iOS开发中,读取系统相册是一项常见的功能,它允许用户从他们的设备中选择图片或视频,并在应用中使用。这项技术主要依赖于苹果提供的Media Library Framework和Photos Framework。以下将详细介绍如何实现iOS系统...
本文将详细讲解如何在Unity中调用iOS和Android原生接口,以便实现打开图库和相机功能,并获取用户选择的图片。 首先,我们需要了解Unity的插件机制。Unity允许开发者编写C#代码,同时可以通过`#if`预处理器指令来...
在iOS中,访问用户的照片库需要获取相应的权限。使用`PHPhotoLibrary`类的`requestAuthorization:`方法来请求访问权限。确保在调用该方法前,添加相应的描述文件键`NSPhotoLibraryAddUsageDescription`或`...
在iOS方面,苹果的UIKit框架包含了UIImagePickerController,这是一个用于让用户在应用中选取照片或录制视频的组件。Unity Native Gallery插件则通过Objective-C或Swift的原生代码封装了这个组件,提供了一个在Unity...
这通常是由于iOS设备在拍摄照片时记录了照片的元数据(Exif信息),其中包括拍摄时的设备方向信息。当这些信息未被正确处理时,图片在其他平台显示时可能会出现旋转。Java作为后端开发语言,在处理这种问题时需要...
在iOS 13.4及更高版本中,用户可能会遇到一个常见的问题,即拍摄的照片在上传到某些应用程序或服务时会自动旋转。这个问题主要影响到使用H5(HTML5)技术构建的网页应用,因为H5对于图像元数据的处理方式可能与原生...
10. **权限管理**:例如访问用户位置、照片库、通知权限等,都需要获取用户的同意。代码可能会教你如何适当地请求和处理这些权限。 11. **推送通知**:了解如何集成Apple Push Notification服务(APNs),实现应用...
7. 共享图库(Shared Photos):允许家庭成员共享照片库,便于家庭成员之间的照片分享和管理。 8. 位移隐私(Privacy Protection for Location Services):用户可以选择仅在使用应用时分享位置,提高位置信息的...
在iOS开发中,获取系统相册中的图片并制作成GIF动态图是一项常见的需求,尤其在社交、娱乐类应用中尤为常见。本教程将深入探讨如何实现这一功能,并对界面进行深度封装,以提供用户友好的体验。 首先,我们需要获取...
应用需要获取用户的照片库访问权限,通常在用户首次打开应用时会请求相应的权限,只有得到用户同意后才能读取和显示他们的图片。 综上所述,“iOS相册demo”涵盖了多个iOS开发的关键知识点,包括UIScrollView的使用...
这些图片通常位于应用的沙盒目录下,加密并存储在iCloud照片库或本地相册中。由于苹果的安全策略,直接访问这些文件需要越狱权限或者使用Apple的开发工具如Xcode。 "iOS图片提取"主要涉及到以下几个步骤: 1. **...
在iOS中,通过Qt的QStandardPaths类,可以获取到系统的照片库路径。接着,可以使用QFile或QNetworkAccessManager来读取和加载图片。iOS需要遵循严格的权限管理,因此在使用相册前,需要确保应用已经获得了用户的照片...
这个框架是iOS 8及更高版本中的核心照片库的一部分,它取代了之前的ALAssetLibrary,提供了更现代、更高效的媒体访问接口。下面将详细讨论如何使用PHAsset框架以及如何实现上传到服务器和读取图片信息。 1. **...