Метод motionEnded в Swift 2.0
Кажется, я не могу заставить методы обнаружения движения работать с Swift 2.0/Xcode 7. Получаемая ошибка указывает: "Метод не переопределяет ни один метод из своего суперкласса". Я хочу обнаружить различные движения, используя встроенные методы UIEvent.. т. Е. Встряхнуть. Вот что у меня внутри класса
//this is used for detecting UIEvents i.e. 'Shake'
override func canBecomeFirstResponder() -> Bool {
return true
}
....
override func motionEnded(motion: UIEventSubtype, withEvent event: UIEvent)
{
if motion == .MotionShake && randomNumber == SHAKE
{
print("SHAKE RECEIVED")
correctActionPerformed = true
}
else if motion == .MotionShake && randomNumber != SHAKE
{
print("WRONG ACTION")
wrongActionPerformed = true
}
else
{
print("WRONG ACTION")
wrongActionPerformed = true
}
}
Здесь возникла та же проблема: проблемы миграции Swift 2
2 ответа
Решение
Проблема здесь в том, что параметры были обновлены в Swift 2.0. Параметр UIEvent теперь является UIEvent?. Чтобы избежать этих проблем в будущем, если вы знаете, что функция должна быть переопределена, просто начните вводить "переопределить функцию", и автозаполнение XCode должно дать вам желаемую функцию.
Просто хотел добавить то же самое в Swift 3 iOS 10:
override var canBecomeFirstResponder: Bool {
return true
}
override func motionEnded(_ motion: UIEventSubtype, with event: UIEvent?) {
if motion == .motionShake && randomNumber == SHAKE
{
debugPrint("SHAKE RECEIVED")
correctActionPerformed = true
}
else if motion == .motionShake && randomNumber != SHAKE
{
debugPrint("WRONG ACTION")
wrongActionPerformed = true
}
else
{
debugPrint("WRONG ACTION")
wrongActionPerformed = true
}
}