美文网首页
Photos框架详解 ---- PHImageManager

Photos框架详解 ---- PHImageManager

作者: TyroneTang | 来源:发表于2017-06-01 16:08 被阅读136次

摘自Mattt Thompson PHImage​Manager

1、tableView 中使用 PHImageManager加载图片

func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
    let cell = tableView.dequeueReusableCellWithIdentifier("Cell", forIndexPath: indexPath)

    let manager = PHImageManager.defaultManager()

    if cell.tag != 0 {
        manager.cancelImageRequest(PHImageRequestID(cell.tag))
    }

    let asset = assets[indexPath.row]

    if let creationDate = asset.creationDate {
        cell.textLabel?.text = NSDateFormatter.localizedStringFromDate(creationDate,
            dateStyle: .MediumStyle,
            timeStyle: .MediumStyle
        )
    } else {
        cell.textLabel?.text = nil
    }

    cell.tag = Int(manager.requestImageForAsset(asset,
        targetSize: CGSize(width: 100.0, height: 100.0),
        contentMode: .AspectFill,
        options: nil) { (result, _) in
            if let destinationCell = tableView.cellForRowAtIndexPath(indexPath) {
                destinationCell.imageView?.image = result
            }
    })

    return cell
}

2、PHCachingImageManager 缓存需要显示的图片 with Swift 的willSet / didSet hooks

let cachingImageManager = PHCachingImageManager()
var assets: [PHAsset] = [] {
    willSet {
        cachingImageManager.stopCachingImagesForAllAssets()
    }

    didSet {
        cachingImageManager.startCachingImagesForAssets(self.assets,
            targetSize: PHImageManagerMaximumSize,
            contentMode: .AspectFit,
            options: nil
        )
    }
}

3、使用 PHImageManager 和 PHImageRequestOptions 的复杂功能来做人脸识别

let asset: PHAsset

@IBOutlet weak var imageView: UIImageView!
@IBOutlet weak var progressView: UIProgressView!

override func viewDidLoad() {
    super.viewDidLoad()

    let manager = PHImageManager.defaultManager()

    let initialRequestOptions = PHImageRequestOptions()
    initialRequestOptions.synchronous = true
    initialRequestOptions.resizeMode = .Fast
    initialRequestOptions.deliveryMode = .FastFormat

    manager.requestImageForAsset(asset,
        targetSize: CGSize(width: 250.0, height: 250.0),
        contentMode: .AspectFit,
        options: initialRequestOptions) { (initialResult, _) in
            guard let ciImage = initialResult?.CIImage else {
                return
            }

            let finalRequestOptions = PHImageRequestOptions()
            finalRequestOptions.progressHandler = { (progress, _, _, _) in
                self.progressView.progress = Float(progress)
            }

            let detector = CIDetector(
                ofType: CIDetectorTypeFace,
                context: nil,
                options: [CIDetectorAccuracy: CIDetectorAccuracyLow]
            )

            let features = detector.featuresInImage(ciImage)
            if features.count > 0 {
                var rect = CGRectZero
                features.forEach {
                    rect.unionInPlace($0.bounds)
                }

                let transform = CGAffineTransformMakeScale(1.0 / initialResult!.size.width, 1.0 / initialResult!.size.height)
                finalRequestOptions.normalizedCropRect = CGRectApplyAffineTransform(rect, transform)
            }

            manager.requestImageForAsset(self.asset,
                targetSize: PHImageManagerMaximumSize,
                contentMode: .AspectFit,
                options: finalRequestOptions) { (finalResult, _) in
                    self.imageView.image = finalResult
            }
    }
}

相关文章

  • Photos框架详解 ---- PHImageManager

    摘自Mattt Thompson 的PHImage​Manager 1、tableView 中使用 PHImage...

  • PHotos框架详解

    PHotos框架详解 判断状态 PHAsset : 一个资源, 比如一张图片\一段视频PHAssetCollect...

  • PHCachingImageManager

    父类:PHImageManager 对Photos的图片或视频资源提供了加载或生成预览缩略图和全尺寸图片的方法,针...

  • iOS Photos 框架使用

    Photos Photos 框架是iOS 8之后用于替代AssetsLibrary的一个现代化框架,几年以来,相机...

  • Photos框架的使用

    使用从Photos框架中获取的PHAsset获取UIImage的时候,Photos框架提供了两种方法: 1、PHI...

  • Photos框架的使用总结(一)

    Photos 框架简介 photos框架是ios8 之后退出来的一个专门处理图片和视频的框架. 通过这个框架开发者...

  • iOS保存图片到相册

    UIKit框架下的保存图片 Photos框架下保存图片

  • iOS相册--Photos

    Photos是什么 Photos是苹果全新的照片框架,其要求最低版本为iOS8.利用Photos可以实现以下功能:...

  • iOS - Photos框架详解(调用系统相册)

    人一切的痛苦,本质上都是对自己的无能的愤怒。 1.相册访问权限2.相册中图片变化的监听3.读取相册中的图片4.将图...

  • Swift 中 Photos 的使用

    Swift 中 Photos 的使用 对于 Photos 框架的介绍,推荐观看 objccn.io 的文章[ht...

网友评论

      本文标题:Photos框架详解 ---- PHImageManager

      本文链接:https://www.haomeiwen.com/subject/hkrefxtx.html