在动画期间移动按钮框架

时间:2014-11-17 16:50:33

标签: animation swift uibutton uiviewanimation

我在我的keyboardWillShow方法中使用以下代码,该方法在键盘显示时触发。我知道代码是使用调试运行的,但按钮框架没有变化。当打印首次运行时,origin.y为471.当它在完成时运行时,它仍然是471。

我尝试做的是动画此按钮以显示并向上移动键盘。它将用作文本视图的DONE按钮。

kbHeight是253.

animateDuration是0.25。

Numbers.ANIMATE_DELAY是0.0

//Animated done button with keyboard
    origDoneFrame = btnDone.frame
    btnDone.hidden = false
    println(self.btnDone.frame.origin.y)
    var uConverted:UInt = UInt(animateCurve)
    var options = UIViewAnimationOptions(uConverted << 16)
    UIView.animateWithDuration(
        animateDuration,
        delay: Numbers.ANIMATE_DELAY,
        options: options,
        animations: {
            println(self.btnDone.frame.origin.y)
            println(kbHeight)
            println(self.btnDone.frame.origin.y-kbHeight)
            self.btnDone.frame = CGRectMake(self.btnDone.frame.origin.x, self.btnDone.frame.origin.y - kbHeight, self.btnDone.frame.size.width, self.btnDone.frame.size.height)
            println(self.btnDone.frame.origin.y)
            return Void()
        },
        completion: {finished in
            println(self.btnDone.frame.origin.y)
            return Void()
        }
    )

输出返回如下:

471.0
471.0
253.0
218.0
218.0
471.0

按钮有限制,这是我能看到的唯一可以将其重置回底部的东西,但是当我手动更改框架时,我宁愿忽略约束。

2 个答案:

答案 0 :(得分:0)

  

但是当我手动更改框架时,我宁愿忽略约束。

你不能。 Autolayout并不像那样工作。您必须改为修改约束,否则视图会在自动布局过程中重新定位。

创建约束的插座,使按钮处于垂直位置,修改constant属性,并在动画块中调用view.layoutIfNeeded()

答案 1 :(得分:0)

您可以在某种程度上忽略Autolayout约束。它完全取消它们并不是一件容易的事。使用以下代码,您可以完成此任务:

//Set up done button
        btnDone.removeConstraints(btnDone.constraints())
        btnDone.setTranslatesAutoresizingMaskIntoConstraints(true)
        btnDone.frame = CGRectMake(view.frame.size.width - btnDone.frame.size.width - 8, view.frame.size.height - btnDone.frame.size.height - 8 + self.tabBarController!.tabBar.frame.size.height, btnDone.frame.size.width, btnDone.frame.size.height)
        btnDone.alpha = 0.0
        btnDone.hidden = true

从现在开始,您可以根据需要移动按钮。这确实偶尔会出现关于满足多个约束的警告,但按钮的行为与预期的一样。