0

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

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

Скажите, что в верхней части экрана есть вид A и вид B внизу (в виде контейнера), а затем возможность разрешить пользователю перетаскивать точку разделения горизонта вверх или вниз. (Так что я не говорю о контроллере Разделить IPad/IOS здесь просто быть ясно, или новые виды сплит-приложения в IOS9)

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

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

Это способ, чтобы попытаться осуществить это сейчас с autolayout и все?

enter image description here

ответ

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

+0

Ваш код выглядит нормально. Вы можете полностью избавиться от 'lastLocation'. Вместо этого скорректируйте константу константы на 'pan.translationInView (dragHandle) .y', затем сбросьте перевод на ноль с помощью' pan.setTranslation (CGPointZero, inView: dragHandle) '. –

+0

ok - спасибо за подсказку – Greg