2016-10-25 2 views
1

Как гласит название, как я могу это сделать? Я могу получить первый штрих, но я не знаю, как получить последний штрих, если это жестом. Со следующим кодом я получаю ошибку: значение типа «Set» не имеет члена «последний». Не совсем уверен, как получить позицию, когда выйдет сенсорный экран.Получение вектора из точки касания в swift 3

override func touchesMoved(_ touches: Set<UITouch>, with: UIEvent?){ 
    let firstTouch:UITouch = touches.first! as UITouch 
    let lastTouch:UITouch = touches.last! as UITouch 

    let firstTouchLocation = firstTouch.location(in: self) 
    let lastTouchLocation = lastTouch.location(in: self) 

} 

Я хочу получить местоположение первой точки и местоположение второй точки. Затем я хотел бы использовать длительность салфетки, размер линии и угол линии, чтобы создать импульсный вектор для использования на SKNode. Есть ли способ извлечь эту информацию с помощью UITouch? Любая помощь приветствуется. Спасибо за ваше время!

У меня также есть основные штрихи на экране, которые работают функции

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch:UITouch = touches.first! as UITouch 
    let touchLocation = touch.location(in: self) 
    if playButton.contains(touchLocation) && proceed == true{ 
     playSound1() 
     Ball.physicsBody?.affectedByGravity = true 
     proceed = false} 
    else if infoButton.contains(touchLocation) && proceed == true{ 
     playSound1() 
     loadScene2()} 
    else {} 
} 
+0

Параметр 'touches' набор содержит расположение всех пальцев касаясь экрана для этого одинарные (начала/перемещены/закончился) событие, а не«старт»и позиция«конец»движения. –

ответ

2

Вы должны сохранять значение касания начала и сравнить со значениями в касаниях закончились, а затем делать расчеты там. Обратите внимание, что прикосновение может быть отменено чем-то вроде телефонного звонка, поэтому вам также нужно это предвидеть.

class v: UIViewController { 
     var startPoint: CGPoint? 
     var touchTime = NSDate() 
     override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
      guard touches.count == 1 else { 
       return 
      } 
      if let touch = touches.first { 
       startPoint = touch.location(in: view) 
       touchTime = NSDate() 
      } 
     } 

     override func touchesEnded(_ touches: Set<UITouch>, with event: UIEvent?) { 
      defer { 
       startPoint = nil 
      } 
      guard touches.count == 1, let startPoint = startPoint else { 
       return 
      } 
      if let touch = touches.first { 
       let endPoint = touch.location(in: view) 
       //Calculate your vector from the delta and what not here 
       let direction = CGVector(dx: endPoint.x - startPoint.x, dy: endPoint.y - startPoint.y) 
       let elapsedTime = touchTime.timeIntervalSinceNow 
       let angle = atan2f(Float(direction.dy), Float(direction.dx)) 
      } 
     } 

     override func touchesCancelled(_ touches: Set<UITouch>, with event: UIEvent?) { 
      startPoint = nil 
     } 
    } 
+0

Так что я делаю новый класс контроллера вида? У вас есть несколько контроллеров просмотра? Или я могу использовать эти функции в своем классе меню? Я надеялся просто вычислить этот вектор в моей GameScene не так много в моем MenuScene – Lyres

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