单元格聚焦时无法更改子视图的 alpha

Posted

技术标签:

【中文标题】单元格聚焦时无法更改子视图的 alpha【英文标题】:Can't change alpha of subview when cell is focused 【发布时间】: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

但图标不显示。

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

由于这真的很奇怪,我唯一能想到的是焦点引擎的某些东西正在干扰 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 变化。

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

【问题讨论】:

【参考方案1】:

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

【讨论】:

我不应该重新加载数据来更改一次单元格的外观。似乎焦点 API 正在干扰单元格 UI 的更新。

以上是关于单元格聚焦时无法更改子视图的 alpha的主要内容,如果未能解决你的问题,请参考以下文章

当collectionview中的第一个单元格聚焦时无法聚焦uibutton

更改UICollectionView单元格的alpha值无法正常工作

当按钮是iOS中自定义单元格的子视图时,如何动态更改按钮文本?

点击单元格后不同的 UITableViewCell 子视图布局

动态表格视图单元格,以编程方式更改子视图高度

UITableViewCell 自定义类 - 更改子视图高度约束后重新加载单元格高度