现在我有这样的动画:
UIView.animateWithDuration(0.5) { () -> Void in
self.scrollToTopBtn.alpha = self.isVisible(self.searchBar.searchBar) ? 0 : 0.6
}
按钮位于屏幕的右下角。我希望她从右到左移动,并且从左到右移动。 我怎么能这样做?
答案 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 buttonWidth
是scrollToTopBtn
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)
}
请注意,一个好的做法可能是在运行时创建按钮,在需要时将其添加到层次结构中,然后在使用它时将其删除。