gpt4 book ai didi

SwiftUI 将值从几何阅读器传递给函数

转载 作者:行者123 更新时间:2023-12-03 18:44:17 25 4
gpt4 key购买 nike

我有一个 View ,它使用几何阅读器来计算图像区域应该有多大:

GeometryReader { metrics in
ZStack{
self.image
.resizable()
.frame(width: (metrics.size.height - 10) * 0.561403509 , height: metrics.size.height - 10, alignment: .top)
.clipped()
}
}

但是我有一个函数,我想使用 GeometryReader 计算的帧高度和宽度来裁剪图像。

我有一个单独的功能,可以在按下按钮时裁剪图像:
 DownloadImageButton(prepareImagefunction: { self.prepareImage() })

然后调用 prepareImage 函数:
func prepareImage( ) {
// In order for image cropping to work, we need the equivalent of view.bounds in order to adjust the crop so that it correctly measures the crop area. We need metrics.width and metrics.height
var adjustmentScaleForDisplaySize = targetSize.width / metrics.width

请注意,GeometryReader 是调用 prepareImage 的父 View 的 subview 。因此,理想情况下,子节点会将度量值保存在 EnvironmentObject 或绑定(bind)到父节点中。

最佳答案

Is there a way to pass the value calculated by GeometryReader to a function?


是的,你可以这样做。变量 metricsGeometryProxy ,所以函数签名应该像下面的例子
private func resizedImage(for metrics: GeometryProxy) -> some View {
self.image
.resizable()
.frame(width: (metrics.size.height - 10) * 0.561403509 , height: metrics.size.height - 10, alignment: .top)
.clipped()
}
所以你的用法
GeometryReader { metrics in
ZStack{
self.resizedImage(for: metrics)
}
}
更新:对于更改的请求
假设您在 subview 中绑定(bind)为
@Binding var cropSize: CGSize
上面的函数可以修改如下
private func resizedImage(for metrics: GeometryProxy) -> some View {
let size = CGSize(width: (metrics.size.height - 10) * 0.561403509,
height: metrics.size.height - 10)
self.cropSize = size
return self.image
.resizable()
.frame(width: size.width, height: size.height, alignment: .top)
.clipped()
}
backup

关于SwiftUI 将值从几何阅读器传递给函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60514912/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com