2014-11-07 4 views
1

Я переопределение:Перекрытие touchesBegan в Swift

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) 

в Swift.

Я задаюсь вопросом, правильно ли это для получения одной точки касания:

var touchPoint: CGPoint! = event.touchesForView(self)?.anyObject()?.locationInView(self) 

Заранее спасибо!

ответ

2

Начиная с iOS 8.3, touchesBegan принимает параметр touches, который является Set<NSObject>. Сейчас Set<UITouch>. Таким образом, вы бы:

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    guard let point = touches.first?.location(in: view) else { return } 

    // use `point` here 
} 

В предыдущих версиях IOS, touchesBegan была определена в качестве параметра NSSet, как указано в этом вопросе, так что вы бы:

override func touchesBegan(touches: NSSet, withEvent event: UIEvent) { 
    if let touch = touches.anyObject() as? UITouch { 
     let touchPoint = touch.locationInView(view) 
     ... 
    } 
} 
+0

спасибо за советы! – ppalancica

+0

Это больше не компилируется, следующая почта более актуальна и объясняет лучший способ реализации touchhesBegan: http://stackoverflow.com/questions/28771896/overriding-method-with-selector-touchesbeganwithevent-has-incompatible-type – Clarkeye

+0

Вопрос явно предшествовал iOS 8.3 и явно указал параметр 'NSSet', используемый в предыдущих версиях iOS, но для будущих читателей я обновил его соответствующим образом. Благодарю. – Rob

Смежные вопросы