UIView 的帧未显示使用 UIPanGestureRecognizer 更新



我在视图控制器中有一个子视图,我在其中添加了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已使用翻译进行更新。但是,我在屏幕上看不到帧更改,子视图看起来总是像开始时一样。

我可能缺少什么?

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

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

相关内容

  • 没有找到相关文章

最新更新