如何在动画中点击按钮时使按钮消失

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
    }

希望你能想通。