Какой подход / контроль IOS для перетаскивания точки встречаются двумя UIViews? (пример макета включен)
Вопрос
Какой подход IOS рекомендуется (или есть элемент управления IOS для этого, о котором я не знаю), чтобы позволить пользователю перетаскивать вертел между двумя UIView вверх и вниз?
Скажем, есть вид А в верхней части экрана и вид В внизу (в пределах контейнера), а затем возможность позволить пользователю перетаскивать точку разделения горизонта вверх или вниз. (поэтому я не говорю о контроллере разделенного представления iPad/IOS, чтобы прояснить ситуацию, или о новом разделенном представлении приложения в IOS9)
Аспекты вопроса интереса
- Существует ли существующий элемент управления IOS, который может это сделать?
- Есть ли хорошо известные люди, которые используют библиотеку для этого?
- Является ли концепция (если делать это самостоятельно), возможно, сделать это:
- установить ограничения автопоставки для всех представлений в представлении контейнера (см. ниже)
- установить ограничение 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:
()
}
}
}