NSTimer Swift 难度

NSTimer Swift difficulty

我正在尝试创建一个 NSTimer,以便我可以将 UIImageView 向下移动,但是 NSTImer有困难,先说这个。

var timer = NSTimer.scheduledTimerWithTimeInterval(0.5, target:self(), selector: Selector ("mrockdown"), userInfo: nil, repeats: true)

调用中参数 #1 缺少参数。但是当我从 target:self() 中删除括号时,它告诉我

Cannot invoke 'scheduledTimerWIthTimerInterval' with an argument list of type '(Double, target: ViewController -> () -> ViewController, selector: Selector, userinfo: nil, repeates Bool.

我该怎么办?

问题与 你说的有关。看起来您正试图将此作为 属性 声明的一部分:

class ViewController {
    var timer = ...
    // ...
}

但是你不能那样做,因为就存储的 属性 而言,没有 self。您需要将计时器声明为 Optional,然后再对其进行初始化:

class ViewController {
    var timer = NSTimer!
    func someMethod {
        timer = ...
    }
}

然后你将删除括号(它们是错误的)并且一切都会编译得很好。

您可以在要触发计时器的函数内执行此操作(即 viewDidLoad 或某些 IBAction

 _ = Timer.scheduledTimer(timeInterval: yourInterval, target: self, selector: #selector(yourFunction), userInfo: nil, repeats: true)

也就是说,要为视图设置动画,您应该改用它:

UIView.animate(withDuration: yourDuration) {
    // set yourView's final position here
}