UIView重新渲染布局时,不会触发draw函数
Posted
技术标签:
【中文标题】UIView重新渲染布局时,不会触发draw函数【英文标题】:when re-render layout of UIView, the draw function is not triggered 【发布时间】:2016-11-10 19:47:56 【问题描述】:我正在使用 Xcode 8.1
我是 UIView 的子类:
class DrawingView: UIView
override func draw(_ rect: CGRect)
super.draw(rect)
print("drawing...")
override func touchesMoved(_ touches: Set<UITouch>, with event: UIEvent?)
// re-renader the layout when finger moves
setNeedsLayout()
super.touchesMoved(touches, with: event)
当我运行我的应用程序时,上面的draw(...)
函数在应用程序启动时被调用一次。 (我看到了打印消息)
然后,我手指在屏幕上移动,我预计每次手指移动都应该调用draw(...)
(因为我调用了setNeedsLayout()
),
但是draw(...)
函数永远不会被调用。为什么?
【问题讨论】:
How Do I Force Redrawing (drawRect) of a SubView When it Changes Dimensions?的可能重复 【参考方案1】:要触发视图重新绘制,请调用setNeedsDisplay()
,而不是setNeedsLayout()
【讨论】:
调用setNeedsLayout()
将导致调用layoutSubviews()
。 layoutSubviews()
的实现应该设置所有子视图的框架。尽管您可以在任何地方设置视图框架,但出于性能和代码可读性的考虑,建议您使用该方法进行设置。当你使用约束时,你不需要实现这个方法,框架是由自动布局系统为你使用约束设置的。以上是关于UIView重新渲染布局时,不会触发draw函数的主要内容,如果未能解决你的问题,请参考以下文章
使用带有graphql的react hooks时,按钮元素中的onClick不会触发react-table中的重新渲染
Vuex 全局状态更改不会触发 Nuxt 中 v-for 循环中的重新渲染组件