SwiftUI заполнить форму с пользовательским рисунком - PullRequest
0 голосов
/ 22 апреля 2020

Я хотел бы использовать модификатор .fill для заполнения фигуры шаблоном, например, проверенным шаблоном.

У меня есть, например,

Rectangle()
   .fill(Color.red) 

Я знаю, что могу использовать что-то вроде

let myGradient = LinearGradient(gradient: Gradient(colors: [.black, . red]), startPoint: .top, endPoint: .bottom)

 .fill(myGradient) 

Но я не могу заставить ни один из градиентов создать шаблон, который мне нужен после

Я вижу, что fill должен соответствовать ShapeStyle , есть ли пример того, как я мог бы создать свой собственный ShapeStyle

enter image description here

Я делаю не хочу создать собственную фигуру, только пользовательскую заливку

1 Ответ

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

Протокол ShapeStyle пока непрозрачен, но, как документально подтверждено, Shape соответствует ForegroundStyle, поэтому ваша цель может быть достигнута с помощью следующего подхода.

Протестировано с Xcode 11.4 / iOS 13,4

demo

struct TileShape: Shape {
    var count = 10
    func path(in rect: CGRect) -> Path {
        var path = Path()
        path.move(to: .zero)
        let size = CGSize(width: rect.maxX / CGFloat(count), height: rect.maxY / CGFloat(count))
        for h in 0 ..< count {
            for w in 0 ..< count {
                if w % 2 == h % 2 {
                    path.addRect(CGRect(origin: CGPoint(x: CGFloat(w) * size.width, y: CGFloat(h) * size.height), size: size))
                }
            }
        }
        return path
    }
}

struct TestFillPattern: View {
    var body: some View {
        TileShape().fill(Color.red)
            .frame(width: 300, height: 300)
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...