2017-08-23 8 views
1

UIPanGestureRecognizerを追加したviewControllerにサブビューがあります。私は、ユーザーがそれを下にドラッグすると、そのようなサブビューを拡大したいと思いますので、私はこのようなジェスチャー認識の状態を処理しようとしている:私はmySubview.frame = newFrameにブレークポイントを設定UIPanGestureRecognizerでUIViewのフレームが更新されない

@objc func panning(_ gestureRecognizer: UIPanGestureRecognizer) { 
    let translation = gestureRecognizer.translation(in: view) 

    if gestureRecognizer.state == .began { 
     originalFrame = self.mySubview.frame 
    } else if gestureRecognizer.state == .changed { 
     if translation.y > 0 { 
      var newFrame = originalFrame 
      newFrame.size.height += translation.y 
      mySubview.frame = newFrame 
     } 
    } 
} 

、私はが更新されていることがわかり翻訳と一緒に。しかし、私は画面にフレームの変化が表示されない、サブビューは常に最初のように見えます。

どうすればよいですか?

答えて

0

ビューのフレームが自動レイアウトによって設定されている場合は、ビューのフレーム自体ではなく、制約を更新する必要があります。

2

PanGestureはトリッキーですが、それでの作業は非常に興味深いです...

私はあなたのビューに正しくパンジェスチャーを追加したと仮定しています。したがって、ジェスチャーのみの取り扱いを書き留めてください。

func handlePanGesture(_ gesture: UIPanGestureRecognizer) { 
    var translatedPoint: CGPoint = gesture.translation(in: self.superview) 

    let playerCenterX: CGFloat = (gesture.view?.center.x)! + translatedPoint.x 
    let playerCenterY: CGFloat = (gesture.view?.center.y)! + translatedPoint.y 

    translatedPoint = CGPoint.init(x: playerCenterX, 
            y: playerCenterY) 

    gesture.view?.center = translatedPoint 
    gesture.setTranslation(CGPoint.zero, in: self.superview) 

} 

重要なことは、ジェスチャーの動きが終わるたびに、その翻訳をゼロに戻すことです。

お客様の要件に応じて、このself.superviewを変更し、座標を使用してビューフレームを更新してください。

関連する問題