【问题标题】:UIVisualEffectView added to UICollectionViewCell visiblyUIVisualEffectView 明显添加到 UICollectionViewCell
【发布时间】:2018-08-29 08:33:19
【问题描述】:

我有UICollectionView 有很多单元格。细胞上有需要模糊的图像。这就是为什么我要在image views 中添加带有模糊效果的UIVisualEffectView。单元格就像页面——每个单元格都占据了整个屏幕。

问题出在第二个单元格上。当它出现时,模糊的视图被明显添加并且很丑陋。其余的单元格在屏幕上变得可见并且正常时已经具有模糊的视图。这是我用来添加blur view的代码:

class ImageCell: UICollectionViewCell {

    @IBOutlet weak var mainImageView: UIImageView!
    @IBOutlet weak var backgroundImageView: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()

        let regularBlur = UIBlurEffect(style: .regular)
        let blurView = UIVisualEffectView(effect: regularBlur)
        blurView.frame = backgroundImageView.bounds
        blurView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        backgroundImageView.addSubview(blurView)

    }
}

【问题讨论】:

  • 我认为问题可能是为屏幕的大面积加载模糊需要大量处理,以便您能够在模糊完成之前看到图像。您的图像是否完全覆盖了单元格?如果是这样,您可能想寻找替代解决方案。就像那里总是模糊不清。其他选项是在模糊准备好之前隐藏图像,并在模糊准备好时取消隐藏。
  • @zero 感谢您的回复。是的,图像完全覆盖了单元格。 “总是模糊不清”是什么意思?
  • 始终保持模糊就像在集合视图本身的顶部设置模糊一样。所以你只有 1 个模糊,而不是每个单元格 1 个。但也许解决方案是在加载模糊之前隐藏图像。你怎么看?
  • @zero 我如何知道模糊是否准备好?我想我不能只有一个模糊,因为在模糊上还有另一个图像,不应该被模糊。
  • 将其隐藏在 awakeFromNib 中,将使用示例代码发布答案。

标签: ios uicollectionview uivisualeffectview


【解决方案1】:

修改你的代码:

class ImageCell: UICollectionViewCell {

    @IBOutlet weak var mainImageView: UIImageView!
    @IBOutlet weak var backgroundImageView: UIImageView!

    override func awakeFromNib() {
        super.awakeFromNib()

        backgroundImageView.isHidden = true
        let regularBlur = UIBlurEffect(style: .regular)
        let blurView = UIVisualEffectView(effect: regularBlur)
        blurView.frame = backgroundImageView.bounds
        blurView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
        backgroundImageView.addSubview(blurView)
        backgroundImageView.isHidden = false
    }
}

【讨论】:

  • 谢谢。我试过了,但我仍然有这个问题。它现在不是每次都发生,而是有时而不总是在第二个牢房上发生。也许我应该以不同的方式进行模糊处理,但我担心其他方式会很重。
【解决方案2】:

你可以这样编码:

class ImageCell: UICollectionViewCell {

@IBOutlet weak var mainImageView: UIImageView!
@IBOutlet weak var backgroundImageView: UIImageView!

let blurView = UIVisualEffectView(effect: UIBlurEffect(style: .regular))


override func awakeFromNib() {
    super.awakeFromNib()

    blurView.frame = backgroundImageView.bounds
    blurView.autoresizingMask = [.flexibleHeight, .flexibleWidth]
    backgroundImageView.addSubview(blurView)
}

override func prepareForReuse() {
        blurView.isHidden = true
    }
}

【讨论】:

  • 感谢您的回复。一旦重复使用单元格,这将完全隐藏模糊视图,并且在此之前也不会解决问题(我试过了)。我需要模糊视图一直存在,但要在单元格对用户可见之前添加。目前在第二个单元格中添加了一些对用户可见的动画。
  • 我现在明白了。您是否尝试直接从 xib 文件添加模糊效果视图?
  • 我是从storyboard添加的,结果是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多