0

質問

ユーザーが2つのUIViewの間で唾を上下にドラッグできるようにするために、どのIOSアプローチが推奨されていますか(または、私が認識していないIOSコントロールがありますか?)

画面の上部にビュー A があり、下部 (コンテナー ビュー内) にビュー B があるとします。次に、ユーザーが水平分割ポイントを上下にドラッグできるようにします。(つまり、ここでは明確にするために iPad/IOS 分割ビュー コントローラーや、IOS9 の新しいアプリケーション分割ビューについて話しているわけではありません)

関心のある問題の側面

  1. これを実行できる既存の IOS コントロールはありますか?
  2. 人々がこれに使用するよく知られているライブラリはありますか?
  3. おそらくこれを行うためのコンセプトです(自分で行う場合):
    • コンテナー ビュー内のすべてのビューに対して自動レイアウトの制約を設定します (以下を参照)。
    • 上から指定された距離になるようにgrabHandle制約を設定します
    • 上部ビューを設定して、グラブハンドルの場所に下部が依存するように設定し、下部ビューの上部についても同じです
    • ジェスチャハンドラをgrabHandlerに追加し、それが何らかの形で移動したときに場所をUIコンテナビューに戻します...
    • 「grabHandleDistanceFromTheTopConstraint」を変更して新しい位置を調整しますか?

これは、autolayout とすべてでこれを実装しようとする方法ですか?

ここに画像の説明を入力

4

1 に答える 1

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

}

ここに画像の説明を入力

于 2015-10-25T05:30:47.957 に答える