PHImageManager是否以像素或点大小返回2x和3x屏幕的图像?

edd*_*dit 7 ios swift photokit

我正在通过PHImageManager从相机胶卷加载图像,但返回的图像不是视网膜分辨率.我是否必须自己提供2倍和3倍的倍增器,或者我有什么问题吗?

这是我的代码:

class ReviewableImageView: UIImageView {

    ...unrelated code

    imageRequestOptions = PHImageRequestOptions()
    imageRequestOptions.deliveryMode = .HighQualityFormat
    imageRequestOptions.resizeMode = .Exact

    ...unrelated code

    self.contentMode = .ScaleAspectFit
    self.backgroundColor = UIColor.clearColor()
    self.userInteractionEnabled = true

    ... unrelated code

    func reloadImage(){
        let imageManager = PHCachingImageManager()//PHImageManager()

        imageManager.requestImageForAsset(self.imageAsset,
            targetSize: self.frame.size,
            contentMode: .AspectFit,
            options: imageRequestOptions,
            resultHandler: { (image: UIImage!, info: [NSObject : AnyObject]!) in
                self.image = image
        })
    }

}
Run Code Online (Sandbox Code Playgroud)

Sta*_*ots 7

据我的实验与PHImageManager你必须提供一个targetSize像素为单位.例如,假设您想要一个尺寸为400x800像素的图像.对于这种情况,您可以设置目标大小,如下所示:

 // Set target size.
 let targetSize = CGSizeMake(400, 800)
Run Code Online (Sandbox Code Playgroud)

关于你的代码示例,在Apple的文档中声明:

框架矩形的坐标始终以磅为单位指定.

因此,要设置正确的目标大小,您可以使用类似于以下内容的代码:

// Get scale factor associated with the screen. 
let scale = UIScreen.mainScreen().scale

// Request the image.
imageManager.requestImageForAsset(self.imageAsset,
            targetSize: CGSizeMake(self.frame.size.width * scale, self.frame.size.height * scale),
            contentMode: .AspectFit,
            options: imageRequestOptions,
            resultHandler: { (image, info) -> Void in
                // Handle the result here...
        })
Run Code Online (Sandbox Code Playgroud)


mat*_*att 2

很难从您的代码中判断您是否意识到将被多次resultHandler调用。第一次调用时,您可能会得到低分辨率低质量的图像。但最终它将使用正确缩放的图像来调用。

  • 实际上,我认为因为他使用的是“deliveryMode = .HighQualityFormat”,他只会获得高质量图像,并且“resultHandler”每个图像只会触发一次。[来自文档](https://developer.apple.com/library/prerelease/ios/documentation/Photos/Reference/PHImageRequestOptions_Class/index.html#//apple_ref/c/tdef/PHImageRequestOptionsDeliveryMode) (3认同)