Есть ли указатель для каждой точки касания в IOS
Я исследовал всюду и не могу найти, есть ли уникальный идентификатор для каждой точки касания в ios. Я также хотел бы знать, как получить доступ к этому в быстром, но не могу найти никакой документации по нему.
1 ответ
Не совсем для каждой точки, но для каждого прикосновения. Для доступа к ним требуется ваша собственная обработка касаний, например, в UIView, где происходят касания, или его ViewController. Это просто требует от вас написать свои собственные методы для touchesBegan:withEvent:
, touchesMoved:withEvent:
а также touchesEnded:withEvent:
,
когда touchesBegan:withEvent:
, touchesMoved:withEvent:
а также touchesEnded:withEvent:
вызываются iOS, они сообщают о прикосновениях в NSSet
, Каждый член этого набора является уникальным указателем на сенсорную структуру данных, и вы должны использовать их в качестве ключей в NSMutableDictionary
если вы хотите фильтровать прикосновения с течением времени.
Как это в touchesBegan
когда вы впервые сталкиваетесь с прикосновением:
var pointDict: [String?: NSObject?] = [:]
...
func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
// Regular multitouch handling.
for touch in touches.allObjects as UITouch {
// Create a new key from the UITouch pointer:
let key = \(touch)
// Put the point into the dictionary as an NSValue
pointDict.setValue(NSValue(CGPoint: touch.locationInView(myView)), forKey:key)
}
}
Сейчас в touchesMoved
вам нужно проверить указатель на сохраненные ключи:
func touchesMoved(touches: NSSet, withEvent event: UIEvent) {
for touch in touches.allObjects as UITouch {
// Create a new key from the UITouch pointer:
let key = \(touch)
// See if the key has been used already:
let oldPoint = pointDict[key]
if oldPoint != nil {
(do whatever is needed to continue the point sequence here)
}
}
}
Если уже есть запись, которая использует тот же touchID, что и ее ключ, вы возвращаете сохраненный объект для ключа. Если ни одно предыдущее прикосновение не использовало этот идентификатор, словарь вернет nil, когда вы запросите соответствующий объект.
Теперь вы можете назначить свои собственные указатели этим точкам касания, зная, что все они принадлежат одному и тому же событию касания.