NSTimer Swift сложность

Я пытаюсь создать NSTimer, чтобы я мог переместить UIImageView вниз, но NSTImer испытывает трудности, говоря сначала, что это.

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

отсутствует аргумент для параметра № 1 в вызове. Но когда я убираю скобки из target:self(), он говорит мне

Не удается вызвать «scheduledTimerWIthTimerInterval» со ​​списком аргументов типа «(Double, target: ViewController -> () -> ViewController, selector: Selector, userinfo: nil, Repeates Bool.

Что я должен делать?


person Chris Hunter    schedule 22.04.2015    source источник


Ответы (2)


Проблема связана с тем, где вы это говорите. Похоже, вы пытаетесь сказать это как часть объявления свойства:

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

Но вы не можете этого сделать, потому что нет self в отношении хранимого свойства. Вам нужно объявить таймер как необязательный, а затем инициализировать его позже:

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

Затем вы удалите круглые скобки (они неправильные), и все будет скомпилировано просто отлично.

person matt    schedule 22.04.2015
comment
Однако вы не должны не использовать повторяющийся таймер только для анимации. Если да, остановитесь. Вместо этого используйте анимацию. Вот для чего это нужно. - person matt; 22.04.2015

Вы можете сделать это внутри функции, где вы хотите запустить таймер (например, 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
}
person caesss    schedule 12.02.2018