gpt4 book ai didi

swift - 如何在 UITableViewCell 选择期间为文本标签颜色变化设置动画?

转载 作者:可可西里 更新时间:2023-11-01 00:51:58 25 4
gpt4 key购买 nike

我正在尝试通过创建 UITableViewCell 的子类来为我的表格 View 单元格创建自定义选择样式。当我单击一个单元格时,我希望它改变颜色并淡化回原始颜色。我读过关于 SO 的其他帖子,例如 this one , 但它似乎不起作用。

编辑:selectionStyle 设置为 .None

当我使用 setHighlighted(_:) 时,颜色不会立即改变,只会在点击持续大约 0.5 秒时发生。

我还使用了 setSelected(_:)。颜色会立即改变,但不会变回来。所以我在 tableView(didSelectRowAtIndexPath:) 中添加了 deselectRowAtIndexPath(_:) 但这根本不会导致任何变化。然后我尝试使用 tableView.reloadRowsAtIndexPaths(_:) ,最后颜色改变并恢复到原来的颜色。但不幸的是,它没有为最后一部分设置动画,而是淡化回原来的颜色。我还注意到,在颜色改变后,它也会使原始颜色变暗(由 tableView.reloadRowsAtIndexPaths(_:) 引起)。

我放弃了使用 setSelected(_:)setHighlighted(_:) 并尝试使用 touchesBegan(_:)touchesEnded(_:)。为了保持简短,与上面相同......

这些是我尝试使用的代码(不是全部)。

UITableViewCell 的子类中:

override func setSelected(selected: Bool, animated: Bool) {
super.setSelected(selected, animated: animated)

label.textColor = selected ? UIColor.redColor() : UIColor.blackColor()
}

override func setHighlighted(highlighted: Bool, animated: Bool) {
label.textColor = highlighted ? UIColor.redColor() : UIColor.blackColor()
}

override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesBegan(touches, withEvent: event)

label.textColor = UIColor.redColor()
}

override func touchesEnded(touches: Set<UITouch>, withEvent event: UIEvent?) {
super.touchesEnded(touches, withEvent: event)

let changeEnded = CATransition()
changeEnded.duration = 0.5

nameLabel.layer.addAnimation(changeEnded, forKey: nil)
nameLabel.textColor = .blackColor()
}

在 TableView Controller 中(也不在一起):

tableView.reloadRowsAtIndexPaths([indexPath], withRowAnimation: .Fade)

tableView.deselectRowAtIndexPath(indexPath, animated: true)

最佳答案

我以某种方式设法解决了它,但感觉不应该这样做。为 UILabel 制作如此简单的动画不是应该更简单吗?

override func tableView(tableView: UITableView, didSelectRowAtIndexPath indexPath: NSIndexPath) {
let selected = tableView.cellForRowAtIndexPath(indexPath) as! CustomViewCell

let changeColor = CATransition(); changeColor.duration = 1

CATransaction.begin()

CATransaction.setCompletionBlock {
selected.label.layer.addAnimation(changeColor, forKey: nil)
selected.label.textColor = .blackColor()
}

selected.nameLabel.textColor = .redColor()

CATransaction.commit()
}

关于swift - 如何在 UITableViewCell 选择期间为文本标签颜色变化设置动画?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34522805/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com