Добавление тени в подпредставление мешает родительскому представлению (iOS Swift)

Есть идеи, как добиться этого эффекта тени? Этот экран взят из приложения для Android, которое я использую Swift (ios).

обратите внимание, что у меня есть два вида, и когда я добавляю тень к обоим, они мешают и становятся темнее.

1 ответ

Хитрость, позволяющая добиться этого, состоит в том, чтобы поместить посередине еще одно представление, которое обрезает содержимое вашего вида сверху. Изучите следующий код:

      let bottomShadowView = UIView(frame: CGRect(x: 100.0, y: 100.0, width: 200.0, height: 100.0))
bottomShadowView.backgroundColor = .white
bottomShadowView.layer.cornerRadius = 20.0
bottomShadowView.layer.shadowColor = UIColor.black.cgColor
bottomShadowView.layer.shadowOpacity = 0.2
bottomShadowView.layer.shadowRadius = 8
view.addSubview(bottomShadowView)

let bottomClipView = UIView(frame: bottomShadowView.bounds)
bottomClipView.layer.cornerRadius = bottomShadowView.layer.cornerRadius
bottomClipView.clipsToBounds = true
bottomShadowView.addSubview(bottomClipView)

let topShadowView = UIView(frame: CGRect(x: 0.0, y: 0.0, width: 200.0, height: 50.0))
topShadowView.backgroundColor = .white
topShadowView.layer.cornerRadius = 20.0
topShadowView.layer.shadowColor = UIColor.black.cgColor
topShadowView.layer.shadowOpacity = 0.2
topShadowView.layer.shadowRadius = 8
bottomClipView.addSubview(topShadowView)

Обратите внимание, что вы можете сделать большую часть этого в конструкторе интерфейсов, но код должен дать вам лучшее понимание того, что происходит.

The bottomClipViewдолжен иметь тот же размер, что и родительский вид тени, и иметь те же функции, такие как радиус угла. Затем просто применитеclipsToBoundsтак что все, что вы поместите на этот вид, ничего не вытянет за его пределы и не будет мешать тени.

Другие вопросы по тегам