Что мне нравится делать с SwiftUI, так это то, что определенная часть изображения (ось, точка y, предоставляемая системой управления контентом) всегда видна, также в случаях, когда изображение необходимо изменить и обрезать в соответствии с макетом.
Визуальный пример того, чего я хочу достичь
В следующем примере кода создается вывод, который можно увидеть на первом снимке экрана примера:
struct NewsPost{
var image: UIImage
var imageSalientPoint: CGPoint
var headline: String
}
struct ContentView: View {
var newsPost = NewsPost(image: #imageLiteral(resourceName: "example1"), imageSalientPoint: CGPoint(x: 150, y: 300), headline: "The power of swift UI!")
var body: some View {
VStack(){
Image(uiImage: newsPost.image)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(height: 175, alignment: .top)
.clipped()
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ZStack{
Color.purple.edgesIgnoringSafeArea(.all)
ContentView()
}
}
}
Если бы кадр изображения был постоянным, я мог бы решить эту проблему, добавив модификатор offset(x:,y:)
. Однако рамки различаются по размеру (например, в моем примере ширина зависит от устройства), поэтому смещение необходимо рассчитывать динамически. Для этого мне нужно знать размер рамки изображения и новый размер UIImage
.
. Я экспериментировал с GeometryReader
и ÀnchorPreferences
безуспешно. Есть идеи, как решить эту проблему в SwiftUI?