【问题标题】:UIView's frame is not shown updated with UIPanGestureRecognizerUIView 的框架未显示为使用 UIPanGestureRecognizer 更新
【发布时间】:2018-01-31 20:28:06
【问题描述】:

我在 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 已随翻译更新。但是,我没有看到屏幕中的框架变化,子视图看起来总是像开始一样。

我可能会错过什么?

【问题讨论】:

    标签: ios swift3 uiview frame uipangesturerecognizer


    【解决方案1】:

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

    【讨论】:

      【解决方案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 并使用坐标更新您的视图框架...

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-26
        相关资源
        最近更新 更多