Как добавить тень на оверлей фигуры, не закрывая ее текст? SwiftUI - PullRequest
1 голос
/ 05 мая 2020

У меня есть текстовое представление, видимость которого можно переключать. Я хочу, чтобы текст отображался поверх RoundedRectangle с падающей тенью.

Проблема с наложением фигуры в том, что она должна быть непрозрачной, чтобы отбрасывать тень, и поэтому она покрывает текст, как вы можно увидеть в следующем фрагменте кода:

Text("Hello, world!")
    .font(.title)
    .foregroundColor(self.digitalOn ? Color.black : Color.white)
    .padding()
    .overlay(RoundedRectangle(cornerRadius: 10)
        .fill(Color.white)
        .shadow(color: Color.black.opacity(1), radius: 5, x: 10, y: 10)
    )
    .padding()

Мне кажется безумным, что нет способа контролировать непрозрачность или цвет текста независимо от переднего плана. Полагаю, я просто подхожу к проблеме совершенно неверно. Может кто меня поправит?

1 Ответ

0 голосов
/ 05 мая 2020

Вот решение (протестировано с Xcode 11.4)

demo

Text("Hello, world!")
    .font(.title)
    .foregroundColor(self.digitalOn ? Color.black : Color.white)
    .padding()
    .background(RoundedRectangle(cornerRadius: 10)
        .fill(Color.white)
    )
    .compositingGroup()     // << here !!
    .shadow(color: Color.black.opacity(1), radius: 5, x: 10, y: 10) // << shadow to all composition
    .padding()
...