图像在ios中滚动时波动

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了图像在ios中滚动时波动相关的知识,希望对你有一定的参考价值。

我正在从url中获取图像并在tableview中显示它成功发生但是当我自动滚动并反复更改但是在我停留了几秒钟(大约10次或更长时间)之后的正确图像负载。

func load_image(urlString:String)
    {
        let imgURL: NSURL = NSURL(string: urlString)!
        let request: NSURLRequest = NSURLRequest(URL: imgURL)

        let session = NSURLSession.sharedSession()
        let task = session.dataTaskWithRequest(request){
            (data, response, error) -> Void in

            if (error == nil && data != nil)
            {
                func display_image()
                {
                    cell.pic.image = UIImage(data: data!)
                }

                dispatch_async(dispatch_get_main_queue(), display_image)
            }

        }

        task.resume()

    }
    load_image(urls[indexPath.row])
答案

首先,为什么你加载图像,我想,cellForRowAtIndexPath?您可以在viewDidLoad中加载它并存储在某个数组中。但如果你需要这样做,就像你在做...

为了获得更好的性能您可以使用NSCache来防止每次tableview将显示您的单元格时加载图像。尝试类似的东西:

let imageCache = NSCache()
func load_image(urlString:String)
{
    if let imageFromCache = imageCache.objectForKey(urlString) as? UIImage {
        cell.pic.image = imageFromCache
        return
    }
    let imgURL: NSURL = NSURL(string: urlString)!
    let request: NSURLRequest = NSURLRequest(URL: imgURL)

    let session = NSURLSession.sharedSession()
    let task = session.dataTaskWithRequest(request){
        (data, response, error) -> Void in

        if (error == nil && data != nil)
        {
            func display_image()
            {
                let imageToCache = UIImage(data: data!)
                cell.pic.image = UIImage(data: data!)
                imageCache.setObject(imageToCache!, forKey: urlString)
            }

            dispatch_async(dispatch_get_main_queue(), display_image)
        }

    }

    task.resume()

}

有关NSCache的更多信息,您可以查看documentation

另一答案

滚动时正在重用您的单元格。将在滚动时调用cellForRowAt方法。

imageView.image = nil方法中设置cellForRowAt,这样在下载之前图像视图上不会显示任何图像。

我们制作imageView.image = nil是因为如果没有可用于该单元的图像,则不应该为该单元显示图像。

以上是关于图像在ios中滚动时波动的主要内容,如果未能解决你的问题,请参考以下文章

滚动时在另一个片段视频视图中重叠一个片段的视频拇指

自动在ios中滚动图像

在 iOS 8 中滚动时背景图像闪烁问题

谷歌地图片段在 N​​estedScrollView 内滚动

在 ios 的滚动视图中绘制缩放的图像视图?

音频处理Melodyne 网络缩放功能 ( 音符分离线 | 片段分离线 | 窗口滚动条 | 网格缩放 | 修改图像显示位置 | 显示五线谱 )