我对UIView
动画相对较新,并制作了一个" infoView"帧的简单上/下动画。
深蓝色区域可触摸并切换到目前为止工作正常的动画。
问题只是从右上角的UILabel
改变了TEXT。如果我在动画的完成块之前,之后或之中更改Label的内容,则动画始终会失败。 - >然后它不再有动画......它似乎眨了一下。我不知道这里的问题是什么......
一些代码: 我保存动画的两个帧位置:
override func viewDidLayoutSubviews() {
super.viewDidLayoutSubviews()
infoViewRectNotVisible = infoView.frame
infoViewRectVisible = CGRect(x: infoView.frame.minX, y: searchBar.frame.minY, width: infoView.frame.width, height: infoView.frame.height)
}
我只是上下动画infoView:
@IBAction func infoButtonPressed(_ sender: Any) {
infoIsVisible = !infoIsVisible
showHideLabel.text = infoIsVisible ? "hide Info" : "show Info"
print(infoView.frame)
print(infoViewRectVisible)
print(infoViewRectNotVisible)
UIView.animate(withDuration: 0.3, delay: 0, options: .curveEaseInOut, animations: {
self.infoView.frame = self.infoIsVisible ? self.infoViewRectVisible : self.infoViewRectNotVisible
})
}
如果我评论 showHideLabel.text = infoIsVisible? "隐藏信息" :"显示信息" out,动画按原样运行,否则不再动画
infoIsVisible Bool和保存的帧(infoViewRectVisible& infoViewRectNotVisible)始终是正确的。
我试过了:
.setNeedsLayout()
,.layoutIfNeeded()
.translatesAutoresizingMaskIntoConstraints
为假我真的不知道为什么我不能改变文本 - 或者我完全误解了什么?
感谢您的帮助!
答案 0 :(得分:0)
您无需为框架设置动画即可获得所需的效果。您可以改为为正确的视图转换设置动画:
let yTranslation = CGAffineTransform(
translationX: 0.0,
y: infoView.frame.height - searchBar.frame.height
)
UIView.animate(
withDuration: 0.3,
delay: 0,
options: .curveEaseInOut,
animations: {
self.infoView.transform = self.infoIsVisible ? yTranslation : .identity
}
)