Есть ли способ создать точную область крана из формы изображения? - PullRequest
1 голос
/ 01 марта 2020

Я пытаюсь создать интерактивную карту США, но чтобы это работало, зона попадания каждого штата должна быть точной в зависимости от ее формы. В противном случае пользователь вызовет другие соседние состояния.

Прикрепленный код. Я искал все, что мог, и ничего не нашел. Любые предложения были бы полезны. Спасибо.

struct MapGraphi c: Просмотр {

@State private var stateColor:Color = .white

var body: some View {

    ZStack {

        Image("California")
        .resizable()
        .scaledToFit()
        .colorMultiply(Color("lGrey"))
        .frame(width: 50.45, height: 87.41)

        .onTapGesture {

        switch self.stateColor {
        case .white:
            self.stateColor = .blue
        case .blue:
            self.stateColor = .red
        default:
            self.stateColor = .white
        }

        }.colorMultiply(stateColor)

    }

}

}

1 Ответ

2 голосов
/ 01 марта 2020

Вам нужно две вещи:

1) построить путь в прямоугольнике изображения (точка за точкой)

extension Path : Shape {

    /// Describes this shape as a path within a rectangular frame of reference.
    ///
    /// - Parameter rect: The frame of reference for describing this shape.
    /// - Returns: A path that describes this shape.
    public func path(in _: CGRect) -> Path

2) установить этот путь (который является форма) в качестве области тестирования удара к вашему изображению

/// Returns a new view that defines the content shape for
/// hit-testing `self` as `shape`. `eoFill` defines whether the
/// shape is interpreted using the even-odd winding number rule or
/// not.
@inlinable public func contentShape<S>(_ shape: S, eoFill: Bool = false) -> some View where S : Shape
...