我想在图像上放置几个形状(矩形),但矩形应该在图像上具有固定位置。因此,无论屏幕大小或屏幕方向如何,矩形都应始终覆盖图像的相同内容。所以在下图中,我想要一个矩形覆盖腿部,另一个覆盖手臂,第三个覆盖腹部和背部。
我的 ImageView 看起来像这样:
struct ImageView: View {
@ObservedObject var imageName: ImageName
var size: CGSize
var body: some View {
VStack {
Image(self.imageName.name)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: size.width, height: size.width, alignment: .center)
}
}
}
连同矩形一起嵌入到我的主视图中:
struct MuscleGuy: View {
@ObservedObject var imageName = ImageName()
var body: some View {
VStack(alignment: .center) {
Spacer()
ZStack(alignment: .center) {
GeometryReader { geometry in
RectangleView( imageName: self.imageName).zIndex(10)
ImageView(imageName: self.imageName, size: geometry.size).zIndex(2)
.position(x: geometry.size.width/2, y: geometry.size.height/2)
}
}
}
}
}
目前,我正在硬编码矩形的大小和位置,例如腿:
Rectangle().foregroundColor(.blue)
.frame(width: size.width, height: size.height/7)
.position(x: size.width/2, y: size.height/2+80)
但显然,一旦屏幕尺寸/方向发生变化,这将不起作用。
将矩形的大小和位置调整为图像的最佳尝试是什么?
//更新
VStack {
Spacer()
ZStack {
Rectangle()
.frame(width:self.imageProperties.width, height: self.imageProperties.height/2)
.border(Color.pink, width: 3)
.zIndex(20)
.foregroundColor(Color.clear)
.position(x: self.imageProperties.minX, y: self.imageProperties.maxY)
ImageView(imageName: self.imageName, imageProps: self.imageProperties).zIndex(2)
}
Spacer()
}
所以我假设,定位是根据整个屏幕完成的,而不是图像位置本身。