У меня есть представление, которое использует Geometry Reader для вычисления размера области изображения:
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. Поэтому в идеале дочерний элемент должен сохранять значения метрик в EnvironmentObject или Binding к родительскому элементу.