拖动超级视图时更新 UILabel 的文本
Updating text of UILabel while dragging superview
在我的应用程序中,我使用 UILongPressGestureRecognizer
在屏幕上拖动视图。此视图有一些子视图,包括 UILabel
,它们使用约束进行布局。当我开始拖动时,我确保从拖动的视图中删除所有定位约束(我保留宽度和高度约束),因为我随着手势识别器的变化手动更新框架。这很好用,但是当我在拖动时更新子视图标签的文本时,被拖动的视图会瞬间跳转到 (0,0),但是 returns 在我拖动更多之后会跳转到正确的位置 which calls框架的另一个更新。
当以.changed
状态调用手势识别器时,以下代码为运行:
let location = gesture.location(in: calendar.view)
moveView(with: location)
这工作得很好,视图跟随手指而不会跳来跳去。
现在我想添加一个随位置变化而更新的标签:
let location = gesture.location(in: calendar.view)
moveView(with: location)
movingView.label.text = "Some Text: \(location.x ?? "Error")"
现在视图一直跳到 (0,0)。
我试图通过采用旧框架然后在更新文本后设置它来解决这个问题,如下所示:
let location = gesture.location(in: calendar.view)
moveView(with: location)
let oldFrame = movingView.frame
movingView.label.text = "Some Text: \(location.x ?? "Error")"
//movingView.layoutIfNeeded() -> tried with this too, to no effect
movingView.frame = oldFrame
然而,视图仍然跳转到 (0,0)。所以我的问题是,对此可以做些什么?如何设置 UILabel
的文本而不打乱视图的拖动?
保持所有约束的视图不变,并在 gestureRecognizer.location
更改时使用 transform
移动视图:
label.transform = CGAffineTransform.identity.translatedBy(x: location.x, y: location.y)
在我的应用程序中,我使用 UILongPressGestureRecognizer
在屏幕上拖动视图。此视图有一些子视图,包括 UILabel
,它们使用约束进行布局。当我开始拖动时,我确保从拖动的视图中删除所有定位约束(我保留宽度和高度约束),因为我随着手势识别器的变化手动更新框架。这很好用,但是当我在拖动时更新子视图标签的文本时,被拖动的视图会瞬间跳转到 (0,0),但是 returns 在我拖动更多之后会跳转到正确的位置 which calls框架的另一个更新。
当以.changed
状态调用手势识别器时,以下代码为运行:
let location = gesture.location(in: calendar.view)
moveView(with: location)
这工作得很好,视图跟随手指而不会跳来跳去。
现在我想添加一个随位置变化而更新的标签:
let location = gesture.location(in: calendar.view)
moveView(with: location)
movingView.label.text = "Some Text: \(location.x ?? "Error")"
现在视图一直跳到 (0,0)。
我试图通过采用旧框架然后在更新文本后设置它来解决这个问题,如下所示:
let location = gesture.location(in: calendar.view)
moveView(with: location)
let oldFrame = movingView.frame
movingView.label.text = "Some Text: \(location.x ?? "Error")"
//movingView.layoutIfNeeded() -> tried with this too, to no effect
movingView.frame = oldFrame
然而,视图仍然跳转到 (0,0)。所以我的问题是,对此可以做些什么?如何设置 UILabel
的文本而不打乱视图的拖动?
保持所有约束的视图不变,并在 gestureRecognizer.location
更改时使用 transform
移动视图:
label.transform = CGAffineTransform.identity.translatedBy(x: location.x, y: location.y)