显示和隐藏自定义动画的按钮

时间:2016-02-04 13:33:25

标签: swift animation button uiappearance

现在我有这样的动画:

UIView.animateWithDuration(0.5) { () -> Void in
   self.scrollToTopBtn.alpha = self.isVisible(self.searchBar.searchBar) ? 0 : 0.6
}

按钮位于屏幕的右下角。我希望她从右到左移动,并且从左到右移动。 我怎么能这样做?

2 个答案:

答案 0 :(得分:1)

有很多方法可以做到这一点。最简单的方法是设置按钮的框架。像这样:

UIView.animateWithDuration(0.5) { () -> Void in
    self.scrollToTopBtn.alpha = self.isVisible(self.searchBar.searchBar) ? 0 : 0.6
    let superViewWidth = self.scrollToTopBtn.superview!.bounds.size.width
    let buttonWidth = self.scrollToTopBtn.frame.size.width

    if(self.isVisible(self.searchBar.searchBar)) { // move it off of the view (towards right)
        self.scrollToTopBtn.frame.origin.x = superViewWidth + buttonWidth
    }
    else { // bring it back to it's position
        self.scrollToTopBtn.frame.origin.x = 10 // or whatever the normal x value for the button is
    }
}

更好的方法

更好的方法是为约束常量设置动画。以下是如何做到的:

首先在视图控制器中为约束创建一个插座:

@IBOutlet weak var buttonLeadingConstraint: NSLayoutConstraint!

转到“界面”构建器,将按钮的前导约束连接到buttonLeadingConstraint插座。

现在你可以像这样动画它:

if(self.isVisible(self.searchBar.searchBar)) { // move it off the screen
    self.buttonLeadingConstraint.constant = self.view.bounds.width + 10
}
else {
    self.buttonLeadingConstraint.constant = 10 // or whatever the normal value is
}

// Now animate the change
UIView.animateWithDuration(0.5) { () -> Void in
    self.view.layoutIfNeeded()
}

请注意,您在调用animateWithDuration 之前设置约束的常量,并且在动画块内,您只需要调用`layoutIfNeeded'在父视图上。

答案 1 :(得分:1)

实现这一目标的一个简单方法是:

1.-让我们说let buttonWidthscrollToTopBtn UIButton的宽度。

2.-将你的scrollToTopBtn放在屏幕的右下角,但一直到屏幕边界。这将是按钮的初始状态。

3.-当您希望它出现时,只需调用以下功能:

func showButton() {
   UIView.animateWithDuration(0.35, animations: { () -> Void in
      self.scrollToTopBtn.transform = CGAffineTransformTranslate(self.scrollToTopBtn.transform, -buttonWidth, 0)
      }, nil)
}

4.-如果你想让它消失:

func hideButton() {
   UIView.animateWithDuration(0.35, animations: { () -> Void in
      self.scrollToTopBtn.transform = CGAffineTransformTranslate(self.scrollToTopBtn.transform, buttonWidth, 0)
      }, nil)
}
  

请注意,一个好的做法可能是在运行时创建按钮,在需要时将其添加到层次结构中,然后在使用它时将其删除。