x,y расположение углов изображения в SwiftUI

#swift #macos #swiftui

Вопрос:

Я работал над проектом,и мне нужно получить положение x, y каждого угла изображения в представлении. Возможно ли этого достичь? Я создаю для macOS,и я знаю,что могу получить положение x, y изображения с помощью GeometryReader, но как я могу получить положение x, y каждого угла?

введите описание изображения здесь

Я попытался получить x,y с помощью следующего хака, предположив, что начальная позиция равна 0,0:

 .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))")  }  

Комментарии:

1. Правильно ли говорить, что тот, что вверху слева, имеет для вас значение: (0.0,0.0)? или вам нужна глобальная ценность? вам не совсем ясно, о чем идет речь! Я также вижу некоторые дополнения в поле зрения, как насчет этого?

2. @swiftPunk Я использую изображения внутри HStack и VStack, поэтому мне нужны глобальные значения.

3. Глобальное значение представления или монитора(экрана)?

4. @swiftPunk Просмотр изображения.

5. Возможно, вы можете показать свой проверенный код?

Ответ №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()    }   }  

введите описание изображения здесь

Комментарии:

1. Что делать, если вы поместите изображение в HStack и VStack, измените его размер и расположите по центру. Как вы можете получить координаты в этом случае, зная, что верхний левый угол не будет равен 0,0?

2. Есть другой способ считывания размера с фона! но в обоих случаях вы добьетесь успеха! Проблема не в том, что или где вы помещаете в изображение, внутри HStack или VStack! все это один и тот же процесс! Я думаю, что вы можете сначала попробовать изучить GeometryReader.

Ответ №2:

Вы можете использовать метод func frame(in: CoordinateSpace) -gt; CGRect на прокси-сервере геометрии, но вы должны знать, в каком CoordinateSpace прямоугольнике вы хотите получить прямоугольник. Вы хотите, чтобы размер изображения отображался в его собственном координатном пространстве? Координатное пространство его супервизора? Координатное пространство окна, в котором оно находится? Координатное пространство экрана, содержащего окно…

Как только у вас будет CGRect представление вида в некотором координатном пространстве, вы можете использовать такие методы, как minX , minY , maxX , maxY на прямой, чтобы построить четыре угла.