Обрезанное изображение вызывает TapAction вне кадра

У меня есть проблема, касающаяся tapAction на изображении. Закрытие TapAction вызывается в отсеченной области, что не должно происходить. Что я должен делать?

Image(uiImage: image)
    .resizable()
    .aspectRatio(contentMode: .fill)
    .frame(height: 200, alignment: .center)
    .presentation(tapped ? Modal(Image(uiImage: image)) : nil)
    .clipped()
    .cornerRadius(10)
    .border(Color.black, width: 2, cornerRadius: 10)
    .tapAction {
        self.tapped.toggle()
    }

Вот и результат:

https://i.s tack.imgur.com/QlaNb.png

1 ответ

Решение

Обновить

Я обновил свой ответ. Это правильный способ сделать это. Существует модификатор под названием contentShape() что вы можете использовать для определения области проверки удара:

import SwiftUI

struct ContentView: View {
    @State private var tapped = false

    var body: some View {
        Image(systemName: "circle.fill")
            .resizable()
            .aspectRatio(contentMode: .fill)
            .frame(height: 200, alignment: .center)
            .presentation(tapped ? Modal(Image(systemName: "photo")) : nil)
            .clipped()
            .cornerRadius(10)
            .border(Color.black, width: 2, cornerRadius: 10)
            .contentShape(TapShape())
            .tapAction {
                self.tapped.toggle()
            }
    }

    struct TapShape : Shape {
        func path(in rect: CGRect) -> Path {
            return Path(CGRect(x: 0, y: 0, width: rect.width, height: 200))
        }
    }
}
Другие вопросы по тегам