9

PHImageManager を介してカメラ ロールから画像を読み込んでいますが、返された画像は網膜解像度ではありません。2x と 3x の乗数を自分で提供する必要がありますか、それとも何か問題がありますか?

これが私のコードです:

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
        })
    }

}
4

2 に答える 2

10

私の実験によると、ピクセル単位PHImageManagerでa を提供する必要があります。たとえば、サイズが 400x800 ピクセルの画像をリクエストしたいとします。この場合、次のようにターゲット サイズを設定できます。targetSize

 // Set target size.
 let targetSize = CGSizeMake(400, 800)

あなたのコード例に関して、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...
        })
于 2016-04-06T13:56:56.970 に答える
2

が複数回resultHandler呼び出されることを認識しているかどうかをコードから判断するのは困難です。初めて呼び出されたときは、低解像度で低品質の画像が表示される場合があります。しかし、最終的には、正しくスケーリングされた画像で呼び出されます。

于 2015-07-31T20:13:27.127 に答える