iOS 获取系统全部图片

   //  MARK:- 获取全部图片,不分文件类型

    private func getAllPhotos() {

        //  注意点!!-这里必须注册通知,不然第一次运行程序时获取不到图片,以后运行会正常显示。体验方式:每次运行项目时修改一下 Bundle Identifier,就可以看到效果。

        PHPhotoLibrary.shared().register(self as! PHPhotoLibraryChangeObserver) //代理 

        //  获取所有系统图片信息集合体

        let allOptions = PHFetchOptions()

        //  对内部元素排序,按照时间由远到近排序

        allOptions.sortDescriptors = [NSSortDescriptor.init(key: "creationDate", ascending: true)]

        //  将元素集合拆解开,此时 allResults 内部是一个个的PHAsset单元

        let allResults = PHAsset.fetchAssets(with: allOptions)

        let count = allResults.count-1

        for intex in 0...count {

            let value = allResults.object(at: intex)

                    dataScoure.add(value)

//                    dataScoureDictionary.setValue(value, forKey: value!)

        }

    }


    // PHPhotoLibraryChangeObserver 代理方法 第一次获取相册信息,这个方法只会进入一次

    func photoLibraryDidChange(_ changeInstance: PHChange) {

        getAllPhotos()

    }

   


/*

NSSortDescriptor 指定用于对象数组排序的对象的属性。

如果是Employee对象需要按照name来排序,就生成下面的descriptor

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:name ascending:YES];

如果需要多个排序,比如先按name排序,再按入职日期排序。那就创建两个descriptor

NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:hireDate ascending:YES];

两个descriptor放到数组里一起传给需要排序的数组。


如果对象就是NSString,就是字符串数组排序,那更简单了,sortdescriptor的key直接指定为nil,就直接排序对象,而不是对象的某一个属性了。

    NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES];

    NSArray *descriptors = [NSArray arrayWithObject:descriptor];

    NSArray *myDataArray = [NSArray arrayWithObjects:@"what", @"xero", @"highligth", @"mountain",@"Victory", @"Balance", nil];

    NSArray *resultArray = [myDataArray sortedArrayUsingDescriptors:descriptors];

    NSLog(@"%@", resultArray);


NSArray 使用sortedArrayUsingDescriptors,返回排序好的数组。

NSMutableArray可以直接使用sortUsingDescriptors,对数组本身排序。


 */



其他方法:

  //  MARK:- 获取全部图片,分文件类型

    func getPHAsset() -> Void {

        //当然,也可以使用下方的方法直接获取权限的状态

        if PHPhotoLibrary.authorizationStatus() == PHAuthorizationStatus.denied {

            alertView(_title: "您还没有开启相册权限", _message: "请您到:设置 > 恒然四季 中添加相册权限", _bText: "确定")

            return

        }

        //search collection data

        let sysfetchResult = PHAssetCollection.fetchAssetCollections(with: .album, subtype: .albumRegular, options: nil)


        // 获得相机胶卷

        let cameraRoll = PHAssetCollection.fetchAssetCollections(with: .smartAlbum, subtype: .smartAlbumUserLibrary, options: nil).lastObject


        for index in 0..<sysfetchResult.count {

                let assetCollection = sysfetchResult.object(at: index)

                let value = getAssetWith(assetCollection:assetCollection)

                dataScoure.addObjects(from: value)

            dataScoureDictionary.setValue(value, forKey: (assetCollection.localizedTitle!))

            

        }

        if cameraRoll != nil {

            let value = getAssetWith(assetCollection:cameraRoll!)

            dataScoure.addObjects(from: value)

            dataScoureDictionary.setValue(value, forKey: (cameraRoll?.localizedTitle!)!)

        }

     

    }



   

猜你喜欢

转载自blog.csdn.net/talinboy/article/details/79458470