【问题标题】:Can't change alpha of subview when cell is focused单元格聚焦时无法更改子视图的 alpha
【发布时间】:2015-11-18 01:09:17
【问题描述】:

我有一个简单的 imageView 添加到自定义 UICollectionViewCell。我在声明它时初始化它:

let likeIcon = UIImageView()

然后我在我的类的初始化器中设置属性:

  likeIcon.image = UIImage(named: "heart_empty")!
  likeIcon.alpha = 0.0
  addSubview(likeIcon)

没什么太疯狂的。我希望 imageView 最初是隐藏的,但在单击单元格时可见。

我有一个简单的方法,当单元格被选中时我会调用它(它还没有动画):

func toggleLikeButtonAnimated() {

    likeIcon.frame = likeIconFrame()
    likeIcon.alpha = 1.0
}

但图标不显示。

  1. 如果我注释掉最初的 likeIcon.alpha = 0.0,则图标可见已选中或未选中,所以它就在那里
  2. toggleLikeButtonAnimated 肯定叫
  3. 框架是正确的框架

由于这真的很奇怪,我唯一能想到的是焦点引擎的某些东西正在干扰 alpha 的变化。

我现在在单元格中有这段代码:

 // MARK: -- Focus
override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
    super.didUpdateFocusInContext(context, withAnimationCoordinator: coordinator)

    coordinator.addCoordinatedAnimations({ () -> Void in
        if self.focused {
            self.focusItem()
        } else {
            self.unfocusItem()
        }
        }) { () -> Void in
    }
}

func focusItem() {

    self.overlay.alpha = 0.0
}


func unfocusItem() {

    self.overlay.alpha = 0.6
}

overlay 位于图标下方,因此不应影响其可见性。所以我尝试了这个:

// MARK: -- Focus
    override func didUpdateFocusInContext(context: UIFocusUpdateContext, withAnimationCoordinator coordinator: UIFocusAnimationCoordinator) {
        super.didUpdateFocusInContext(context, withAnimationCoordinator: coordinator)

        coordinator.addCoordinatedAnimations({ () -> Void in
            if self.focused {
                self.focusItem()
            } else {
                self.unfocusItem()
            }
            }) { () -> Void in
        }
    }

    func focusItem() {

        self.overlay.alpha = 0.0
        self.likeIcon.alpha = 1.0
    }


    func unfocusItem() {

        self.overlay.alpha = 0.6
        self.likeIcon.alpha = 0.0
    }

likeIcon 在单元格聚焦时动画,在未聚焦时动画。但这不是我想要的,似乎焦点引擎的动画在选择时阻止了我的 alpha 变化。

关于如何解决的任何想法?

【问题讨论】:

    标签: swift focus tvos


    【解决方案1】:

    根据您的描述,您希望 imageView 最初是隐藏的,但在单击 UICollectionViewCell 时可见,但它不起作用。设置 UICollectionViewDelegate 时,必须调用 reloadData 函数,就像 UITableView 一样。也许你可以在单击单元格时尝试使用它。解决你的问题。

    【讨论】:

    • 我不应该重新加载数据来更改一次单元格的外观。似乎焦点 API 正在干扰单元格 UI 的更新。
    猜你喜欢
    • 1970-01-01
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多