在我的tableView中我使用带有两个自定义标签的自定义单元格。最终,这些标签的文本会发生变化,但同时调用layoutIfNeeded()
来激活其他一些东西。这导致标签中的文字也有动画,我试图阻止它。
我用来更改文字的代码:
func tapped(recognizer: UIGestureRecognizer) {
let path = NSIndexPath(forRow: myData.count - 1, inSection: 0)
let cell = tableView.cellForRowAtIndexPath(path) as! CustomCell
cell.infoLabel.text = "Changing text here"
UIView.animateWithDuration(0.5) { self.anotherView.layoutIfNeeded() }
}
为防止标注动画,我尝试在CustomLabel
和CustomCell
以及willDisplayCell
中添加此标记:
override func layoutSubviews() {
UIView.performWithoutAnimation { super.layoutSubviews() }
}
或者使用另一种方法阻止它在CustomLabel
和CustomCell
中制作动画:
override func layoutSubviews() {
CATransaction.begin()
CATransaction.setDisableActions(true)
super.layoutSubviews()
CATransaction.commit()
}
我还试过一个属性观察者设置文本并同时删除所有动画:
var text: String {
didSet {
infoLabel.text = text
infoLabel.layer.removeAllAnimations()
}
}
除非我使用,否则似乎无法正常工作
CATransaction.begin()
CATransaction.setDisableActions(true)
cell.infoLabel.text = "Changing text here"
CATransaction.commit()
但是我必须在我改变文字的地方使用它。是否有一个我忽视的地方更优雅地做到这一点?