Swift “访问”;“人民”;相册并从中获取图像

Swift “访问”;“人民”;相册并从中获取图像,swift,photosframework,Swift,Photosframework,我正在开发一个iOS应用程序,我需要将其导入我的应用程序,库中的一些图像,特别是“人物”相册图像,我需要显示它们,但我无法访问此相册,我尝试了以下代码: func FetchCustomAlbumPhotos() { let albumName = "People" var assetCollection = PHAssetCollection() var albumFound = Bool() var photoAss

我正在开发一个iOS应用程序,我需要将其导入我的应用程序,库中的一些图像,特别是“人物”相册图像,我需要显示它们,但我无法访问此相册,我尝试了以下代码:

  func FetchCustomAlbumPhotos()
    {
        let albumName = "People"
        var assetCollection = PHAssetCollection()
        var albumFound = Bool()
        var photoAssets = PHFetchResult<AnyObject>()

        let fetchOptions = PHFetchOptions()
        fetchOptions.predicate = NSPredicate(format: "title = %@", albumName)
        let collection:PHFetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .any, options: fetchOptions)
        if let _:AnyObject = collection.firstObject{
            //found the album
            assetCollection = collection.firstObject!
            albumFound = true
        }
        else { albumFound = false }
        _ = collection.count
        photoAssets = PHAsset.fetchAssets(in: assetCollection, options: nil) as! PHFetchResult<AnyObject>
        let imageManager = PHCachingImageManager()

        //        let imageManager = PHImageManager.defaultManager()

        photoAssets.enumerateObjects{(object: AnyObject!,
            count: Int,
            stop: UnsafeMutablePointer<ObjCBool>) in

            if object is PHAsset{
                let asset = object as! PHAsset
                print("Inside  If object is PHAsset, This is number 1")
                let imageSize = CGSize(width: asset.pixelWidth,
                                       height: asset.pixelHeight)

                /* For faster performance, and maybe degraded image */
                let options = PHImageRequestOptions()
                options.deliveryMode = .fastFormat
                options.isSynchronous = true
                imageManager.requestImage(for: asset,
                                          targetSize: imageSize,
                                          contentMode: .aspectFit ,
                                          options: options,
                                          resultHandler: {
                                            (image, info) -> Void in
                                            print("Image \(String(describing: image))")
                                            self.addImgToArray(uploadImage: image!)
                                            //self.photo = image!
                                            /* The image is now available to us */
                                            //self.addImgToArray(self.photo)
                                            print("enum for image, This is number 2")

                })
            }
        }
    }
func FetchCustomAlbumPhotos()
{
让albumName=“人”
var assetCollection=PHAssetCollection()
var=Bool()
var photoAssets=PHFetchResult()
让fetchOptions=PHFetchOptions()
fetchOptions.predicate=NSPredicate(格式:“title=%@”,albumName)
let collection:PHFetchResult=PHAssetCollection.fetchAssetCollections(带:。相册,子类型:。任意,选项:fetchOptions)
如果let:AnyObject=collection.firstObject{
//找到相册了吗
assetCollection=collection.firstObject!
albumFound=true
}
else{albumFound=false}
_=collection.count
photoAssets=PHAsset.fetchAssets(在:assetCollection中,选项:nil)作为!PHFetchResult
让imageManager=PHCachingImageManager()
//让imageManager=PHImageManager.defaultManager()
photoAssets.enumerateObjects{(对象:AnyObject!,
计数:Int,
停止:不可女性化指针)在
如果对象已设置{
设资产=对象为!相集
打印(“如果对象已设置,则为1号”)
让imageSize=CGSize(宽度:asset.pixelWidth,
高度:资源。像素高度)
/*为了获得更快的性能,甚至可能降低图像质量*/
let options=PHImageRequestOptions()
options.deliveryMode=.fastFormat
options.isSynchronous=true
imageManager.requestImage(用于:资产、,
targetSize:imageSize,
contentMode:。aspectFit,
选项:选项,
结果管理员:{
(图像,信息)->在
打印(“图像\(字符串(描述:图像))”)
self.addimgtarray(上传图像:image!)
//self.photo=image!
/*我们现在可以使用该图像*/
//self.addImgToArray(self.photo)
打印(“图像的枚举,这是数字2”)
})
}
}
}
如果我创建了一个相册并将其命名为“test”,我可以获取它,但无法获取我需要的任何内置相册,如“People”。 有什么帮助吗?

首先:在任何情况下,您都不应该尝试按标题访问相册;我偷懒时会这样做,但用户可以更改用户相册的标题,因此这是不可靠的。您应该使用标识符

第二:要访问内置智能相册,请使用
smartAlbum
类型,并按照@rmaddy的正确建议适当设置子类型

第三:但这对《人物》专辑不起作用。你根本无法访问它

我很确定无法访问“人物”相册是一个bug,如下所述:


当然,我想它可能是故意对你隐瞒的;我不知道。但是恐怕您不能使用该功能。

您能解释一下如何设置子类型吗??是否可以提供重复问题的链接?重复问题是一个链接。看到了吗?超越你的问题???