什么IOS接近/控制拖动点两个UIViews相遇? (包括示例模型)

时间:2015-10-25 03:41:48

标签: ios uiview uiviewcontroller uisplitviewcontroller uisplitview

问题

建议使用哪种IOS方法(或者是否有IOS控件,我不知道)允许用户在两​​个UIView上下拖动吐出来?

假设屏幕顶部有View A,底部有View B(在容器视图中),那么允许用户向上或向下拖动地平线分割点。 (所以我不是在谈论iPad / IOS拆分视图控制器,只是为了清楚,或者新应用程序在IOS9中拆分视图)

感兴趣问题方面

  1. 是否有可以执行此操作的现有IOS控件?
  2. 有没有一个知名的图书馆人们使用这个?
  3. 这个概念(如果自己动手)可能会这样做:
    • 为容器视图中的所有视图设置自动布局约束(见下文)
    • 将grabHandle约束设置为距离顶部
    • 的给定距离
    • 设置顶视图使其底部取决于grabHandle的位置,底部视图的顶部相同
    • 将gestureHandler添加到grabHandler然后当它以某种方式移动时将位置传递回UI容器视图...
    • 通过更改“grabHandleDistanceFromTheTopConstraint”来调整新位置?
  4. 这是尝试使用自动布局和所有实现此方法的方法吗?

    enter image description here

1 个答案:

答案 0 :(得分:0)

实际上我认为这可能有它(似乎工作正常) - 任何建议/意见?

import UIKit

class ViewController: UIViewController {
    @IBOutlet weak var dragHandle: UIView!
    @IBOutlet weak var dragHandleTopConstaint: NSLayoutConstraint!

    var lastLocation:CGPoint = CGPointMake(0, 0)

    override func viewDidLoad() {
        super.viewDidLoad()

        // Allow dragging
        let pan = UIPanGestureRecognizer(target:self, action:"pan:")
        pan.maximumNumberOfTouches = 1
        pan.minimumNumberOfTouches = 1
        self.dragHandle.addGestureRecognizer(pan)
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
    }


    func pan(rec:UIPanGestureRecognizer) {
        switch rec.state {
        case .Began:
            self.lastLocation = self.dragHandle.center
        case .Changed:
            let translation  = rec.translationInView(self.dragHandle)
            let newLocation : CGPoint = CGPointMake(lastLocation.x, lastLocation.y + translation.y)

            self.dragHandleTopConstaint.constant = newLocation.y
        default:
            ()
        }
    }

}

enter image description here