为什么在动画之前更改UIView中的文本时UIView动画失败?

时间:2018-02-20 17:59:01

标签: ios swift animation uiview

我对UIView动画相对较新,并制作了一个" infoView"帧的简单上/下动画。

enter image description here

深蓝色区域可触摸并切换到目前为止工作正常的动画。

问题只是从右上角的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为假
  • ....

我真的不知道为什么我不能改变文本 - 或者我完全误解了什么?

感谢您的帮助!

1 个答案:

答案 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
    }
)