Swift - 如何从照片库中获取最后拍摄的 3 张照片?

时间:2022-10-17
本文介绍了Swift - 如何从照片库中获取最后拍摄的 3 张照片?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

我需要在 viewDidload 事件中从照片库中获取并显示最后拍摄的 3 张照片,而无需任何点击.

I need to get and show last taken 3 photos from photo library on viewDidload event without any clicks.

在这一步之后,当我滚动 ScrollView 时,我应该得到其他 3 张 3 的照片.

After this step, I should get other photos 3 by 3 when I scroll the ScrollView.

您知道使用 swift 执行此操作的正确方法吗?谢谢.

Do you know the proper way to do this with swift? Thanks.

推荐答案

这是一个使用 iOS 8+ 设备可用的 Photos 框架的解决方案:

Here's a solution using the Photos framework available for devices iOS 8+ :

import Photos

class ViewController: UIViewController {

    var images:[UIImage] = []

    func fetchPhotos () {
        // Sort the images by descending creation date and fetch the first 3
        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key:"creationDate", ascending: false)]
        fetchOptions.fetchLimit = 3

        // Fetch the image assets
        let fetchResult: PHFetchResult = PHAsset.fetchAssets(with: PHAssetMediaType.image, options: fetchOptions)

        // If the fetch result isn't empty,
        // proceed with the image request
        if fetchResult.count > 0 {
            let totalImageCountNeeded = 3 // <-- The number of images to fetch
            fetchPhotoAtIndex(0, totalImageCountNeeded, fetchResult)
        }
    }

    // Repeatedly call the following method while incrementing
    // the index until all the photos are fetched
    func fetchPhotoAtIndex(_ index:Int, _ totalImageCountNeeded: Int, _ fetchResult: PHFetchResult<PHAsset>) {

        // Note that if the request is not set to synchronous
        // the requestImageForAsset will return both the image
        // and thumbnail; by setting synchronous to true it
        // will return just the thumbnail
        let requestOptions = PHImageRequestOptions()
        requestOptions.isSynchronous = true

        // Perform the image request
        PHImageManager.default().requestImage(for: fetchResult.object(at: index) as PHAsset, targetSize: view.frame.size, contentMode: PHImageContentMode.aspectFill, options: requestOptions, resultHandler: { (image, _) in
            if let image = image {
                // Add the returned image to your array
                self.images += [image]
            }
            // If you haven't already reached the first
            // index of the fetch result and if you haven't
            // already stored all of the images you need,
            // perform the fetch request again with an
            // incremented index
            if index + 1 < fetchResult.count && self.images.count < totalImageCountNeeded {
                self.fetchPhotoAtIndex(index + 1, totalImageCountNeeded, fetchResult)
            } else {
                // Else you have completed creating your array
                print("Completed array: (self.images)")
            }
        })
    }
}

这篇关于Swift - 如何从照片库中获取最后拍摄的 3 张照片?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

上一条:以编程方式设置 contentOffset 触发 scrollViewDidScroll 下一条:如何继承 UIScrollView 并使委托属性私有

相关文章

最新文章