実行環境
【Xcode】Version 9.2
【Swift】Version 4.0.3
概要
ドラッグ(パン)で高さが変わるUIViewを実装する。
実装
let testView = UIView()
override func viewDidLoad() {
super.viewDidLoad()
//対象のUIViewを作成する
self.testView.frame = CGRect(x: 0, y: 0, width: self.view.frame.width, height: self.view.frame.height / 2)
self.testView.backgroundColor = UIColor.green
//panジェスチャーのインスタンスを作成する
let gesture = UIPanGestureRecognizer(target: self, action: #selector(panGesture(_:)))
//ジェスチャーを追加する
self.testView.addGestureRecognizer(gesture)
//Viewを追加する
self.view.addSubview(self.testView)
}
@objc func panGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
//移動量を取得する
let move = gestureRecognizer.translation(in: self.view)
//y軸の移動量をviewの高さに加える
self.testView.frame.size.height += move.y
//移動量をリセットする
gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
}
おまけ
UIPanGestureRecognizer
の state
を使うと、ドラッグ中や指を離した時の処理を分けることができます。
gestureRecognizer.state
は、.began
→.changed
→.ended
と変化します。
@objc func panGesture(_ gestureRecognizer: UIPanGestureRecognizer) {
//これを追加する
switch gestureRecognizer.state {
case .changed:
self.testView.backgroundColor = UIColor.blue
case .ended:
self.testView.backgroundColor = UIColor.green
default:
break
}
//移動量を取得する
let move = gestureRecognizer.translation(in: self.view)
//y軸の移動量をviewの高さに加える
self.testView.frame.size.height += move.y
//移動量をリセットする
gestureRecognizer.setTranslation(CGPoint.zero, in: self.view)
}