【问题标题】:Xcode 9 Swift 4 - Reposition views by draggingXcode 9 Swift 4 - 通过拖动重新定位视图
【发布时间】:2018-01-30 12:29:43
【问题描述】:

我对 iOS 开发很陌生。但是有多年的编程经验。 无论如何,我很难为我的问题找到解决方案。

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

每个圆圈也应该能够通过向右或向左拖动来移动。但从它的左兄弟开始,永远不会小于 0。

在android中这很简单,只需将左边距设置为拖动,一切都很好。

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

我敢肯定,这就是我缺乏经验的方式。所以我希望对swift有更多了解的人可以帮助我。

这里有一些图片来说明我想要实现的目标。

First render where one circle has an offset

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

The result of the gesture

我需要它来无缝移动,所以在手势结束后不要重新定位,而是随着手指移动。 如您所见,被拖动的圆圈右侧的圆圈与被移动的圆圈保持相对位置。

谢谢。

【问题讨论】:

  • 顺便说一句,偏移单位是基于圆的宽度。所以 offset: 1 表示左偏移与一个圆的宽度相同,offset: 0.5 表示左偏移为一个圆的一半宽度。

标签: ios xcode swift4 gesture


【解决方案1】:

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

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 手势。

拖动组件的第二种解决方案可以是平移手势

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变量

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-10
    • 1970-01-01
    • 2015-05-31
    相关资源
    最近更新 更多