在同一个 UIImageView 中加载多个图像会在显示新图像之前闪烁最后一个图像

Posted

技术标签:

【中文标题】在同一个 UIImageView 中加载多个图像会在显示新图像之前闪烁最后一个图像【英文标题】:Loading multiple images in same UIImageView flashes last image before showing new image 【发布时间】:2016-04-05 02:19:21 【问题描述】:

目标是使用相同的 UIImageView 渲染不同的图像。每次用户点击不同的按钮时,都会在 UIImageView 中呈现不同的图像。

示例用户流程:

用户点击图片 1 的按钮。UIImageView 显示加载图片 1。 用户点击不同的按钮来关闭 UIImageView。 UIImageView 被隐藏。 用户点击图片 2 的不同按钮。UIImageView 加载了图片 2,然后取消隐藏。图片 1 在图片 2 出现之前出现片刻。

这是第一次。但是,每次后续时间都会在显示第二张图像之前的一瞬间显示先前图像的一瞥,从而导致闪烁的用户体验。例如,在查看第二张图片时,您会先短暂地看到第一张图片,然后第二张图片才会出现在屏幕上。

如何解决后续加载问题,以免出现之前的图像?

此函数将新图像加载到 UIImageView 中:

private func loadImage(targetView: UIImageView, imageURL: String) 
    // Get file path to <imageURL>
    let imageURL = getFilePath(imageURL)

    // Create image & show in <targetView>
    if let image = UIImage(named: imageURL) 
        targetView.contentMode = .ScaleAspectFill
        targetView.image = image
        targetView.clipsToBounds = true
        targetView.hidden = false
     else 
        print("Error rendering image for \(imageURL)")
    

【问题讨论】:

在显示下一张之前,您是否尝试过将 imageView 的图像设置为零? @MudOnTire 所以在targetView.image = nil 之前添加targetView.image = image? 我无法想象为什么会有闪烁,因为在你按下按钮显示另一张图片之前,imageView中已经有一张图片,下一张图片只是替换它,你的意思是下一张图像会出现并消失并再次出现? @MudOnTire 哎呀没有仔细阅读您的评论。假设图像 1 在屏幕上,用户按下按钮关闭 UIImageView。按下图像 2 的按钮会再次显示 UIImageView,其中图像 1 出现在图像 2 之前。 @MudOnTire 刚刚更新了问题以澄清流程 【参考方案1】:

解决方案是在关闭时重置 UIImageView,这样第二张图片就会被重新加载到新的 UIImageView 中。

【讨论】:

【参考方案2】:

我不确定您要完成什么,但这肯定会让您找到解决方案。我试图让它尽可能详细,但我可以回答你的任何问题。

class RandomImage: UITableViewCell 

@IBOutlet weak var ImageView: UIImageView!
@IBOutlet weak var ChangingButton: UIButton!

override func awakeFromNib() 
    super.awakeFromNib()
    // Initialization code

    self.ChangingButton.setTitle("Change", forState: UIControlState.Normal)



@IBAction func changeImageTapped(sender: UIButton)
    var firstRandomNumber = arc4random_uniform(NUMBER) + 1
    var firstImageString:String = String(format: "image%i", firstRandomNumber)

    self.ImageView.image = UIIMAge(named: firstImageString)


在连接您的插座并调整代码中所需的信息后,您应该会得到一个按钮,单击该按钮会在每次单击后返回一个随机图像。我希望这可以帮助你。

干杯。

【讨论】:

以上是关于在同一个 UIImageView 中加载多个图像会在显示新图像之前闪烁最后一个图像的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 IBDesignable UIImageView 在 prepareForInterfaceBuilder 中加载图像

在uiimageview中加载像gif这样的图像时出错

故事板,UIImageView。从包中加载图像

UIImageView 和 UIButton 背景图像在模拟器中加载时变黑

填充单元格后如何在单元格中加载/显示 UIImageView

为啥在 Web 浏览器中工作的 url 没有在 UIImageview 中加载