照片框架.requestImageForAsset返回两个结果.无法设置图像视图

Jon*_*ono 22 uiimageview ios uicollectionview photosframework

所以我使用SwipeView库(https://github.com/nicklockwood/SwipeView)使用iOS8的Photos框架显示图像.

但是,当我调用requestImageForAsset时,我注意到我得到了两个结果,一个缩略图大小,以及我想要的更大的大小.但是,更大的图像没有及时加载(我称之为async我理解),因此返回小图像.

这段代码可能更有意义.

    func swipeView(swipeView: SwipeView!, viewForItemAtIndex index: Int, reusingView view: UIView!) -> UIView! {
            let asset: PHAsset = self.photosAsset[index] as PHAsset

    var imageView: UIImageView!

    let screenSize: CGSize = UIScreen.mainScreen().bounds.size
    let targetSize = CGSizeMake(screenSize.width, screenSize.height)


    var options = PHImageRequestOptions()
//        options.deliveryMode = PHImageRequestOptionsDeliveryMode.Opportunistic
    options.resizeMode = PHImageRequestOptionsResizeMode.Exact


    PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: options, resultHandler: {(result, info)in
        println("huhuhuh")
        println(result.size)
        println(info)
        imageView = UIImageView(image: result)
    })
    println("setting view)
    return imageView
}
Run Code Online (Sandbox Code Playgroud)

这是日志输出:

Enteredhuhuhuh
(33.5,60.0)
SETTING VIEW
huhuhuh
(320.0,568.0)
Run Code Online (Sandbox Code Playgroud)

如您所见,它会在收到大图像之前返回图像视图.如何让它返回这个更大的图像,以便它不显示缩略图?

谢谢.

Ton*_*ony 79

PHImageManager类的标题

如果 - [PHImageRequestOptions同步的]返回NO(或选项为nil),resultHandler可以被调用1次或更多次.通常在这种情况下,resultHandler将在主线程上以请求的结果异步调用.但是,如果deliveryMode = PHImageRequestOptionsDeliveryModeOpportunistic,则可以在调用线程上同步调用resultHandler,如果任何图像数据立即可用.如果在第一次传递中返回的图像数据质量不足,则将在以后使用"正确"结果在主线程上异步调用resultHandler.如果请求被取消,则可能根本不会调用resultHandler.如果 - [PHImageRequestOptions isSynchronous]返回YES,则将在调用线程上同步,同步和调用resultHandler.无法取消同步请求.

所以,你要做的就是让你resultHandler被召唤synchronously

PHImageRequestOptions *option = [PHImageRequestOptions new];
option.synchronous = YES;

[[PHImageManager defaultManager] requestImageForAsset:asset targetSize:target contentMode:PHImageContentModeAspectFill options:option resultHandler:^(UIImage *result, NSDictionary *info) {
        //this block will be called synchronously
}];
Run Code Online (Sandbox Code Playgroud)

因此,在结束方法之前将调用您的块

祝好运!

  • 这正是我想要的。极好的 :) (2认同)