Xcode 9 Swift 4 - 通过拖动重新定位视图

时间:2018-01-30 12:29:44

标签: ios xcode swift4 gesture

我对iOS开发很新。但拥有多年的编程经验。 无论如何,我很难找到解决问题的方法。

在我的应用程序中,我根据服务器的数据渲染彩色圆圈行。 这些圈子中的每一个都在服务器上设置了不同的属性。 其中之一是"偏移"属性。 这应该用于渲染与其左边兄弟相距一定距离的圆,或者如果它是第一个,则为父视图的起点。

然后,也可以通过向右或向左拖动来移动每个圆圈。但是从它的左边兄弟那里来的永远不会少于0。

在android中这很容易,只需在拖动时设置左边距,一切都很好。

但是在xcode中我很难搞清楚如何完成这项工作。

我确信我的这种方式对经验不足。所以我希望对swift有更多了解的人可以帮助我。

下面是一些图片,以明确我希望得到什么。

First render where one circle has an offset

enter image description here

The gesture where the 3. last circle is drages to the right

enter image description here

The result of the gesture

enter image description here

我需要这个无缝移动,所以在手势结束后不要再进行再次移植,而是用手指移动。 正如你所看到的那样,那个正在徘徊的圆圈,保持它们与被移动的相对位置。

谢谢。

1 个答案:

答案 0 :(得分:0)

有几种方法可以做到这一点。第一种可能的解决方案是使用滑动手势来移动对象。

override func viewDidLoad() {
    super.viewDidLoad()

    let swipeGesture = UISwipeGestureRecognizer(target: self, action: "handleSwipe:")
    swipeGesture.direction = [.Down, .Up]
    self.view.addGestureRecognizer(swipeGesture)
}

func handleSwipe(sender: UISwipeGestureRecognizer) {
    print(sender.direction)
}

使用这些手势可以用手指沿着物体移动,您可以根据需要使用.left.right手势。

  

拖动组件的第二个解决方案可以是Pan Gesture

func detectPan(recognizer:UIPanGestureRecognizer) {
  var translation  = recognizer.translationInView(self.superview!)
  self.center = CGPointMake(lastLocation.x + translation.x, lastLocation.y + translation.y)
}

转换变量在平移时检测视图的新坐标。将根据更改的坐标调整视图的中心。

override func touchesBegan(touches: Set<NSObject>, withEvent event: UIEvent) {
  // Promote the touched view
  self.superview?.bringSubviewToFront(self)

  // Remember original location
  lastLocation = self.center
}

单击视图时,当前视图将显示在其他视图的前面,视图的中心将分配给lastlocation变量

希望这会有所帮助。