我创建了一个按钮并设置了一些动画,但现在我无法点击它或在动作时与它进行交互,如果它让我点击它我会收到错误。 我的目标是当你点击它时按钮在移动时消失。请帮忙!!提前谢谢!
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.
}
}
答案 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
}
希望你能搞清楚。