Я получил это из .ipa, созданного как артефакт Дженкинса. Проблема для меня заключалась в том, что Дженкинс использовал другой профиль обеспечения.
Я вручную установил Jenkins для использования того же профиля, что и обновленная версия, которую я пытался установить, и он начал работать.
** Обновлено до Swift 4 и Xcode 9 (8 октября 2017 г.) **
Прежде всего, не забудьте включить события с несколькими касаниями, установив
self.view.isMultipleTouchEnabled = true
в ваш код UIViewController
или с помощью соответствующей опции раскадровки в Xcode:
В противном случае вы всегда получите одно касание в touchesBegan
( см. документацию здесь ).
Затем внутри touchesBegan
перебираем множество касаний, чтобы получить их координаты:
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
for touch in touches {
let location = touch.location(in: self.view)
print(location)
}
}
В Swift 1.2 это изменилось, и touchesBegan
теперь предоставляет набор NSObjects. Чтобы выполнить итерацию через них, нарисуйте коллекцию касаний как набор объектов UITouch следующим образом:
override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
var touchSet = touches as! Set<UITouch>
for touch in touchSet{
let location = touch.locationInView(self.view)
println(location)
}
}
Вы должны перебирать разные касания. Таким образом, вы можете получить доступ к каждому прикосновению.
for touch in touches{
//Handle touch
let touchLocation = touch.locationInView(self.view)
}
данный аргумент touches
представляет собой набор обнаруженных касаний. Вы видите только одно касание, потому что вы выбираете одно из касаний с помощью:
touches.anyObject() // Selects a random object (touch) from the set
. Чтобы получить все касания, выполните итерацию заданного набора
for obj in touches.allObjects {
let touch = obj as UITouch
let location = touch.locationInView(self.view)
println(location)
}
Для Swift 3, основанный на ответе @ Andrew:
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
let touchSet = touches
for touch in touchSet{
let location = touch.location(in: self.view)
print(location)
}
}
ИЗМЕНИТЬ, Мой плохой, не отвечающий на ваш вопрос, имел ту же проблему, и кто-то связал меня с этим предыдущим ответом :
В любом случае мне пришлось изменить несколько вещей, чтобы заставить его работать в swift 3, вот мой текущий код:
var fingers = [String?](repeating: nil, count:5)
override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesBegan(touches, with: event)
for touch in touches{
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if finger == nil {
fingers[index] = String(format: "%p", touch)
print("finger \(index+1): x=\(point.x) , y=\(point.y)")
break
}
}
}
}
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesMoved(touches, with: event)
for touch in touches {
let point = touch.location(in: self.view)
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
print("finger \(index+1): x=\(point.x) , y=\(point.y)")
break
}
}
}
}
override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) {
super.touchesEnded(touches, with: event)
for touch in touches {
for (index,finger) in fingers.enumerated() {
if let finger = finger, finger == String(format: "%p", touch) {
fingers[index] = nil
break
}
}
}
}
У меня все еще есть небольшая проблема, но Я думаю, что это связано с моим GestureRecognizer в моем коде. Но это должно сделать трюк. Он будет печатать вам координаты каждой точки в консоли.
В Swift 3,4 Определите указатель касания по его хешу:
// SmallDraw
func pointerHashFromTouch(_ touch:UITouch) -> Int {
return Unmanaged.passUnretained(touch).toOpaque().hashValue
}