【发布时间】:2020-10-18 11:28:53
【问题描述】:
我正在编写一个自定义滚动视图来启用图像缩放和定位。由于它将在 SwiftUI 视图中使用,因此我符合 UIViewRepresentable。我正在尝试获取滚动视图的zoomScale 属性以及contentOffset,以便准确确定图像的外观(当前已缩放和定位)。如果图像没有缩放或定位不同,通常这将是 1.0 和 (0,0)。
我面临的问题是,如果我将绑定传递到在缩放比例更改或 contentOffset 更改时更改的视图中,则重新绘制视图(因为刷新支持 @State)。这会导致诸如“在更新视图时更新状态”错误等问题。
以及再次调用 makeUIView 时重置的 contentOffset 和缩放比例。如果我也在那里重用这些值,我们几乎会陷入事件循环。
Scale changes -> Binding changes -> State changes -> Redraw UI -> Scale changes ...
当数据在 SwiftUI 中发生变化时,有什么方法可以将数据从视图中传递出去而不刷新? ViewPreferences 呢?他们可以工作吗?
当“超级视图”中任何其他不相关的@State 更改时,会出现另一个问题,缩放和 contentOffset 被重置,所以我需要将绑定传递给该视图。
谢谢
【问题讨论】:
-
听起来你的代码有bug,因为
makeUIView不应该在可表示的绑定发生变化时被调用,只有updateUIView,所以你会提供你的代码吗?
标签: swiftui