Как сочетать фигуры в SwiftUI? - PullRequest
0 голосов
/ 19 апреля 2020

Мне нужно создать фигуру из нескольких других фигур, и в идеале, я бы хотел получить единственную структуру фигуры в конце, которая бы сложила две фигуры, как ZStack. Я нигде не заметил очевидной реализации этого, поэтому, может быть, у кого-то есть идеи о том, как это реализовать?

Вот что я хочу получить:

struct CustomShape: Shape {
    func path(in rect: CGRect) -> Path {
        // Add shapes here???? For example, combine Rectangle with Circle?
    }
}

1 Ответ

0 голосов
/ 19 апреля 2020

Вы можете использовать func addPath(_ path: Path, transform: CGAffineTransform = .identity) для создания нового Shape следующим образом:

struct CustomShape: Shape {
    func path(in rect: CGRect) -> Path {
        var customShape = Path { p in
            p.move(to: CGPoint(x: 0, y: 0))
            p.addQuadCurve(to: CGPoint(x: 0, y: 100),
                           control: CGPoint(x: 0, y: 0))
            p.addCurve(to: CGPoint(x: 100, y: 400),
                       control1: CGPoint(x: 0, y: 200),
                       control2: CGPoint(x: 100, y: 200))
            p.addCurve(to: CGPoint(x: 200, y: 100),
                       control1: CGPoint(x: 100, y: 200),
                       control2: CGPoint(x: 200, y: 200))
            p.addQuadCurve(to: CGPoint(x: 200, y: 0),
                           control: CGPoint(x: 200, y: 0))
        }

        let rectangle = Rectangle()
            .path(in: customShape.boundingRect)
            .offsetBy(dx: 100, dy: 0)

        customShape.addPath(rectangle, transform: .init(scaleX: 0.5, y: 0.35))

        return customShape
    }
}

И использовать его следующим образом:

struct SwiftUIView: View {
    var body: some View {
        CustomShape()
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...