2014-10-09 60 views
1

斯威夫特的新品牌,但我一点一点地捡起它。我有两个对象,我想与UISwipeGestureRecognizer同时控制。我有它的一个对象的工作,但需要能够在屏幕的左侧滑动和右侧分别控制2个对象。我猜我可以实现一个声明,如果轻扫小于这个位置控制这个对象控制这个只是不知道如何实现。这是我用来控制一个对象的东西。Swift - 编程UISwipeGestureRecognizer来单独控制2个对象

self.swipeRightGesture.addTarget(self, action: Selector("handleRightSwipe:")) 
self.swipeRightGesture.direction = .Right 
self.swipeRightGesture.numberOfTouchesRequired = 1 
self.view?.addGestureRecognizer(self.swipeRightGesture) 

func handleRightSwipe(sender: UIGestureRecognizer) { 
    if !self.isMoving && self.isMovingUp == true{ 
     self.leftobjectmoveright() 
     self.isMoving = true 
     self.isMoving = false 
     self.isMovingUp = false 

    } 
} 

func leftobjectmoveright() { 

    self.leftobject.physicsBody?.velocity = CGVectorMake(75,0) 

} 
+0

对不起。正在努力澄清,但现在认识到其他人不那么清楚。我需要能够分别向上,向左和向右滑动两个对象。我有那3个为左侧物体工作,只需要让它为正确的物体工作。 – Yeap 2014-10-09 18:59:03

回答

0

你打算如何让用户反映哪三个手势(上,左,右)是哪个对象?你是否开始在对象顶部的手势?如果是这样的话,有几种方法。

在我看来,最合乎逻辑的方法是为每个对象创建一组单独的手势,然后在手势识别器中,您可以查看gesture.view来识别哪个导致手势识别器的选择器被调用。例如:

let leftObjectDownSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleDownSwipe:")) 
leftObjectDownSwipe.direction = .Down 
leftObject?.addGestureRecognizer(leftObjectDownSwipe) 

let rightObjectDownSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleDownSwipe:")) 
rightObjectDownSwipe.direction = .Down 
rightObject?.addGestureRecognizer(rightObjectDownSwipe) 

随着handleDownSwipe像这样:

func handleDownSwipe(gesture: UISwipeGestureRecognizer) { 
    if gesture.view == leftObject { 
     println("swiped left one") 
    } else if gesture.view == rightObject { 
     println("swiped right one") 
    } 
} 

或者,如果手势的两个不同的对象的处理都十分不同,你可能只是给他们完全独立的姿态处理。这只是这两个手势处理程序中存在多少通用代码的问题。


或者,你可以把手势识别器上包含这两个视图对象的上海华盈:

let downSwipe = UISwipeGestureRecognizer(target: self, action: Selector("handleDownSwipe:")) 
downSwipe.direction = .Down 
view.addGestureRecognizer(downSwipe) 

然后你可以有手势识别看视图的宽度和比较,到locationInView

func handleDownSwipe(gesture: UISwipeGestureRecognizer) { 
    let location = gesture.locationInView(gesture.view) 
    if location.x < (gesture.view!.frame.size.width/2.0) { 
     println("swiped left side") 
    } else { 
     println("swiped right side") 
    } 
} 
+0

我正在考虑让屏幕基本分成两个“盒子”。因此,如果滑动开始于某个坐标的左侧,则会移动左侧的对象。如果它开始在某个坐标的右侧,它会移动正确的对象。这样你就不必触碰物体来移动它。只需在其中一个“框”中滑动即可。希望我开始有意义,并且你正在对我想要做的事情有更清晰的了解。 – Yeap 2014-10-09 20:34:31

+0

这就是我遇到的麻烦。只需要一些东西来启动我。不知道如何去实施它。 – Yeap 2014-10-09 22:04:55

+0

把超级视图上的手势识别器,然后看'locationInView'。看修改后的答案。或者实际上添加你谈到的这两个“盒子”并使用我的原始答案,只将手势识别器放在盒子上而不是可见的视图对象上。无论哪种方式工作。 – Rob 2014-10-09 22:22:25

相关问题