我想创建一个解决方案,告诉我用户何时完成视图大小调整。目前,我为此使用了一个计时器,但我对我的方法并不满意,因为它感觉不像惯用的 SwiftUI 编码。我正在寻找一种更原生的方法来检测调整大小结束时视图的最终大小。当我们改变窗口大小时,我们的视图大小也会改变。
import SwiftUI
struct ContentView: View {
@State private var resizeTimer: Timer? = nil
var body: some View {
GeometryReader { geometryValue in
Color.white
.onChange(of: geometryValue.size) { newValue in
// Invalidate any existing timer
resizeTimer?.invalidate()
// Start a new timer to detect when resizing ends
resizeTimer = Timer.scheduledTimer(withTimeInterval: 0.01, repeats: false) { _ in // [weak self]
didEndResizing(size: newValue)
}
}
}
.padding()
}
private func didEndResizing(size: CGSize) {
print("View resizing ended. Final size: \(size)")
}
}
要检测窗口大小调整会话的结束,您可以观察
NSWindow.didEndLiveResizeNotification
。notification.object
告诉您哪个NSWindow
窗口已调整大小,因此如果您的应用有多个窗口,您可以检查它以仅响应视图自身窗口的大小调整。例如:WindowAccessor
与Asperi 在此处的回答略有修改。