如何在动画中点击按钮时使按钮消失
How to make a button disappear when it is tapped while it is animating
我创建了一个按钮并为它设置了一些动画,但现在我无法在它运动时点击它或与之交互,如果它允许我点击它,我会收到错误消息。
我的目标是当你点击它时,让按钮在移动时消失。请帮忙!!提前致谢!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Create button
let button = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
UIView.animateWithDuration(4, delay: 3, options: UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.LayoutSubviews | UIViewAnimationOptions.Autoreverse, animations: {
button.frame = CGRectMake(100, 300, 100, 100)
}, completion: nil)
// Create a function that makes the button dissapear when it is tapped
func buttonAction() {
button.alpha = 0
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
您必须通过 'ctrl + drag' 您的按钮从 IB 到您的 ViewController 创建一个出口。接下来您可以创建一个 IBaction() 函数。
@IBAction func likedThis(sender: UIButton) {
//your code
}
你在这个函数中输入的代码会在你按下按钮时自动触发。
为了修复崩溃,您需要将 buttonAction 函数移出 viewDidLoad 范围并像这样修改它:
func buttonAction(button: UIButton) {
button.alpha = 0
}
您还需要更改 button.addTarget(...) param action 从这个 "buttonAction" 到这个 "buttonAction:"。请参阅下面的代码
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
如果您想在按钮移动时与之交互,则不能使用 animateWithDuration 来设置按钮位置的动画。按钮的触摸点实际上是立即移动到最终位置(当它在运动时你可以触摸那里,你会看到它调用了它的action方法)。您需要使用计时器(或 CADisplayLink)在每次调用时逐步移动按钮。
此外,正如其他人指出的那样,您需要将按钮的操作更改为 "buttonAction:",以便按钮将自己作为参数发送。您可以像这样使用 CADisplayLink,
import UIKit
class ViewController: UIViewController {
var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
var displayLink = CADisplayLink(target: self, selector: "handleDisplayLink:")
displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
}
func handleDisplayLink(displayLink: CADisplayLink) {
var buttonFrame = button.frame
buttonFrame.origin.y += 1
button.frame = buttonFrame
if button.frame.origin.y >= 300 {
displayLink.invalidate()
}
}
func buttonAction(sender: UIButton) {
sender.alpha = 0
}
}
也许您可以使用布尔变量跟踪对象是否在移动。
然后,尝试使用 "hidden" 个 属性 按钮:
var moving: Bool!
if moving == true {
button.hidden = true
} else {
button.hidden = false
}
希望你能想通。
我创建了一个按钮并为它设置了一些动画,但现在我无法在它运动时点击它或与之交互,如果它允许我点击它,我会收到错误消息。 我的目标是当你点击它时,让按钮在移动时消失。请帮忙!!提前致谢!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
// Create button
let button = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
UIView.animateWithDuration(4, delay: 3, options: UIViewAnimationOptions.AllowUserInteraction | UIViewAnimationOptions.LayoutSubviews | UIViewAnimationOptions.Autoreverse, animations: {
button.frame = CGRectMake(100, 300, 100, 100)
}, completion: nil)
// Create a function that makes the button dissapear when it is tapped
func buttonAction() {
button.alpha = 0
}
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
}
您必须通过 'ctrl + drag' 您的按钮从 IB 到您的 ViewController 创建一个出口。接下来您可以创建一个 IBaction() 函数。
@IBAction func likedThis(sender: UIButton) {
//your code
}
你在这个函数中输入的代码会在你按下按钮时自动触发。
为了修复崩溃,您需要将 buttonAction 函数移出 viewDidLoad 范围并像这样修改它:
func buttonAction(button: UIButton) {
button.alpha = 0
}
您还需要更改 button.addTarget(...) param action 从这个 "buttonAction" 到这个 "buttonAction:"。请参阅下面的代码
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
如果您想在按钮移动时与之交互,则不能使用 animateWithDuration 来设置按钮位置的动画。按钮的触摸点实际上是立即移动到最终位置(当它在运动时你可以触摸那里,你会看到它调用了它的action方法)。您需要使用计时器(或 CADisplayLink)在每次调用时逐步移动按钮。
此外,正如其他人指出的那样,您需要将按钮的操作更改为 "buttonAction:",以便按钮将自己作为参数发送。您可以像这样使用 CADisplayLink,
import UIKit
class ViewController: UIViewController {
var button: UIButton!
override func viewDidLoad() {
super.viewDidLoad()
button = UIButton.buttonWithType(UIButtonType.System) as UIButton
button.frame = CGRectMake(100, 100, 100, 100)
button.setTitle("Test Button", forState: UIControlState.Normal)
button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)
self.view.addSubview(button)
var displayLink = CADisplayLink(target: self, selector: "handleDisplayLink:")
displayLink.addToRunLoop(NSRunLoop.currentRunLoop(), forMode: NSDefaultRunLoopMode)
}
func handleDisplayLink(displayLink: CADisplayLink) {
var buttonFrame = button.frame
buttonFrame.origin.y += 1
button.frame = buttonFrame
if button.frame.origin.y >= 300 {
displayLink.invalidate()
}
}
func buttonAction(sender: UIButton) {
sender.alpha = 0
}
}
也许您可以使用布尔变量跟踪对象是否在移动。
然后,尝试使用 "hidden" 个 属性 按钮:
var moving: Bool!
if moving == true {
button.hidden = true
} else {
button.hidden = false
}
希望你能想通。