Какой подход / контроль IOS для перетаскивания точки встречаются двумя UIViews? (пример макета включен)

Вопрос

Какой подход IOS рекомендуется (или есть элемент управления IOS для этого, о котором я не знаю), чтобы позволить пользователю перетаскивать вертел между двумя UIView вверх и вниз?

Скажем, есть вид А в верхней части экрана и вид В внизу (в пределах контейнера), а затем возможность позволить пользователю перетаскивать точку разделения горизонта вверх или вниз. (поэтому я не говорю о контроллере разделенного представления iPad/IOS, чтобы прояснить ситуацию, или о новом разделенном представлении приложения в IOS9)

Аспекты вопроса интереса

  1. Существует ли существующий элемент управления IOS, который может это сделать?
  2. Есть ли хорошо известные люди, которые используют библиотеку для этого?
  3. Является ли концепция (если делать это самостоятельно), возможно, сделать это:
    • установить ограничения автопоставки для всех представлений в представлении контейнера (см. ниже)
    • установить ограничение grabHandle на заданное расстояние от вершины
    • установить вид сверху, чтобы его нижняя часть зависела от того, где находится grabHandle, и то же самое для верхней части нижнего вида
    • добавьте gestHandler в grabHandler, а затем, когда он переместится, передайте местоположение обратно в представление контейнера пользовательского интерфейса, где...
    • он корректирует новую позицию, изменяя "grabHandleDistanceFromTheTopConstraint"?

Это способ попытаться реализовать это сейчас с autolayout и все?

1 ответ

Решение

На самом деле я думаю, что это может иметь (кажется, работает нормально) - какие-либо советы / комментарии?

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:
            ()
        }
    }

}

Другие вопросы по тегам