UIView的框架未显示UIPanGestureRecognizer更新

时间:2017-08-23 09:56:26

标签: ios swift3 uiview frame uipangesturerecognizer

我在viewController中有一个子视图,我添加了UIPanGestureRecognizer。当用户将其拖下来时,我想扩展这样的子视图,所以我试图像这样处理手势识别器状态:

@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
        }
    }
}

当我在mySubview.frame = newFrame设置断点时,我看到newFrame已更新为翻译。但是,我没有在屏幕上看到帧的变化,子视图看起来总是像开头一样。

我能错过什么?

2 个答案:

答案 0 :(得分:2)

PanGesture很棘手,但使用它非常有趣......

我假设你已经正确地将pan手势添加到视图中。所以只记下手势的处理。

  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并使用坐标更新您的视图框架

答案 1 :(得分:0)

如果你的视图的框架是由自动布局设置的,你应该更新约束,而不是视图的框架本身。