Swift, используя UISwipeGestureRecongizer

В настоящее время я работаю над своим первым приложением, используя Swift 1.2 и Xcode 6.3, и столкнулся со стеной.

До сих пор я видел два спрайта, появляющихся над видом и опускающихся ниже вида.

func spawnSquare() {
    let square = SKSpriteNode(imageNamed: "Square")
    square.physicsBody = SKPhysicsBody(rectangleOfSize: square.size)
    square.physicsBody?.dynamic = true

    let positionStart = CGPointMake(size.width * 0.5, size.width * 2.0)
    let positionEnd = CGPointMake(size.width * 0.5, size.height * -2.0)

     square.position = positionStart
            addChild(square)


    let shapesMovment = SKAction.moveTo(positionEnd, duration: shapeSpeed)
        square.runAction(shapesMovment)
}

func spawnCircle() {

    let circle = SKSpriteNode(imageNamed: "Circle")
    circle.physicsBody = SKPhysicsBody (circleOfRadius:    
    circle.size.width/2 )
    circle.physicsBody?.dynamic = true

    let positionStart = CGPointMake(size.width * 0.5, size.width * 2.0)
    let positionEnd = CGPointMake(size.width * 0.5, size.height * -2.0)

    circle.position = positionStart
            addChild(circle)


    let shapesMovment = SKAction.moveTo(positionEnd, duration: shapeSpeed)
        circle.runAction(shapesMovment)
        }

Теперь я хочу иметь возможность смахивать один из спрайтов влево или вправо, но я не могу понять, как реализовать действие движения с помощью UISwipeGestureRecogniser.

Я добавил два GestureReconfigizer в didMoveToView.

  let swipeLeft: UISwipeGestureRecognizer  = UISwipeGestureRecognizer(target: self, action: Selector("swipedLeft:"))
    swipeLeft.direction = .Left
    view.addGestureRecognizer(swipeLeft)

    let swipeRight: UISwipeGestureRecognizer = UISwipeGestureRecognizer(target: self, action: Selector("swipedRight:"))
    swipeRight.direction = .Right
    view.addGestureRecognizer(swipeRight)

И я добавил две функции в нижней части GameScene, чтобы в println было указано, что я смахнул

func swipedRight(sender: UISwipeGestureRecognizerDirection) {
    println("Swiped Right")

   }
   func swipedLeft(sender: UISwipeGestureRecognizerDirection) {
        println("Swiped Left")
    }

Теперь я предполагаю, что я могу просто написать код в одной из функций смахивания, чтобы сообщить SwipeGesture, что я хочу переместить спрайт, но я понятия не имею, где начинается, и мне не очень повезло поискать в сети за ответ, так что любая помощь будет принята с благодарностью.


person Avenger    schedule 18.04.2015    source источник
comment
Если вы хотите иметь возможность перетаскивать узлы и бросать их. См. мой ответ здесь: stackoverflow.com/a/28259980/2158465   -  person Epic Byte    schedule 20.04.2015


Ответы (1)


Распознаватели жестов смахивания — это «разовые» сделки. Вам говорят: «Пользователь смахнул!» и это все. Вы не можете заставить пользователя перетаскивать ваш спрайт на основе жеста смахивания.

Если вам нужно фиксированное действие при свайпе (например, анимация спрайта сбоку), то свайп будет работать нормально.

Ваши функции swipedRight и swipedLeft неверны. Целевой метод для распознавателей жестов всегда передает один и только один параметр: распознаватель жестов.

Распознаватель жестов имеет параметр для представления, к которому он прикреплен.

Вам нужно переписать функции swipedRight и swipedLeft с распознавателем жестов смахивания в качестве единственного параметра.

Затем в теле функции вам нужно получить свойство представления из распознавателя жестов (вашего спрайта). Затем вы можете делать любую анимацию, которую хотите, в этом представлении. (

person Duncan C    schedule 18.04.2015