【问题标题】:x,y location of image corners in SwiftUISwiftUI 中图像角的 x,y 位置
【发布时间】:2021-12-16 15:20:16
【问题描述】:

我一直在做一个项目,我需要在视图中获取 Image 中每个角的 x,y 位置。 有可能实现这一目标吗? 我正在为 macOS 构建,我知道我可以使用 GeometryReader 获取图像的 x,y 位置,但是如何获取每个角的 x,y 位置?

假设初始位置为 0,0,我尝试使用以下 hack 来获取 x,y:

.onTapGesture {
   print("Top left corner: \(CGPoint(x: 0, y: 0))")
   print("Top right corner: \(CGPoint(x: self.myImage.width, y: 0))")
   print("Bottom left corner: \(CGPoint(x: 0, y: self.myImage.height))")
   print("Bottom right corner: \(CGPoint(x: self.myImage.width, y: self.myImage.height))")
 }

【问题讨论】:

  • 是否可以说左上角的值对你来说是:(0.0,0.0) 值?或者你想要全球价值?你的问题不清楚!我在视图中也看到了一些填充,那又如何?
  • @swiftPunk 我在 HStack 和 VStack 中使用图像,所以我想要全局值。
  • 视图或监视器(屏幕)的全局值?
  • @swiftPunk 图片视图。
  • 您可以展示您尝试过的代码吗?

标签: swift macos swiftui


【解决方案1】:

GeometryReader 为您提供以下方法:

struct ContentView: View {
    
    var body: some View {
        
        GeometryReader { proxy in
            
            Image("ferrari")
                .resizable()
                .scaledToFit()
                .onTapGesture {
                    print("Top left corner: \(CGPoint(x: 0, y: 0))")
                    print("Top right corner: \(CGPoint(x: proxy.size.width, y: 0))")
                    print("Bottom left corner: \(CGPoint(x: 0, y: proxy.size.height))")
                    print("Bottom right corner: \(CGPoint(x: proxy.size.width, y: proxy.size.height))")
                }
            
        }
        .padding()
        
    }
    
}

【讨论】:

  • 如果将图像放在 HStack 和 VStack 中,调整大小并居中。如果知道左上角不是 0,0,你怎么能得到坐标?
  • 从后台读取大小还有其他方法!但在这两种方式你都会获得成功!问题不在于您在 HStack 或 VStack 中放置图像的内容或位置!都是同一个过程!我认为您可以先尝试学习 GeometryReader。
【解决方案2】:

您可以在几何代理上使用func frame(in: CoordinateSpace) -> CGRect 方法,但您必须知道您想要矩形在哪个CoordinateSpace。你想要图像视图在它自己的坐标空间中的大小吗?其父视图的坐标空间?它所在的窗口的坐标空间?包含窗口的屏幕坐标空间...

一旦你有一个CGRect 代表某个坐标空间中的视图,那么你可以在矩形上使用minXminYmaxXmaxY 等方法来构造四个角。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-09-23
    • 2020-05-25
    • 2013-04-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多