在动画制作过程中点击按钮时如何使按钮消失

时间:2015-03-01 15:02:04

标签: ios iphone swift uibutton uiviewanimation

我创建了一个按钮并设置了一些动画,但现在我无法点击它或在动作时与它进行交互,如果它让我点击它我会收到错误。 我的目标是当你点击它时按钮在移动时消失。请帮忙!!提前谢谢!

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.
}

}

4 个答案:

答案 0 :(得分:2)

为了解决崩溃问题,您需要将 buttonAction 功能移出 viewDidLoad 范围,并按照以下方式进行修改:

func buttonAction(button: UIButton) {

    button.alpha = 0
}

此外,您需要将 button.addTarget(...) param 操作从此“buttonAction”更改为此“buttonAction:” 。见下面的代码

button.addTarget(self, action: "buttonAction:", forControlEvents: UIControlEvents.TouchUpInside)

答案 1 :(得分:0)

您必须通过“按住c键并拖动”按钮从IB到ViewController来创建插座。接下来,您可以创建一个IBaction()函数。

@IBAction func likedThis(sender: UIButton) {
//your code
}

当您按下按钮时,您将自动触发放入此功能的代码。

答案 2 :(得分:0)

如果您希望在按钮移动时与其进行交互,则无法使用animateWithDuration为按钮的位置设置动画。按钮的触摸点实际上会立即移动到最终位置(当它处于运动状态时你可以触摸它,你会看到它调用它的动作方法)。您需要使用计时器(或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
    }

}

答案 3 :(得分:0)

也许您可以使用布尔变量跟踪对象是否正在移动。

然后,尝试使用“隐藏”按钮的属性:

var moving: Bool!

if moving == true {
        button.hidden = true
    } else {
        button.hidden = false
    }

希望你能搞清楚。