Как динамически сместить обрезанное изображение в SwiftUI? - PullRequest
1 голос
/ 31 марта 2020

Что мне нравится делать с 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?

...