2016-10-05 4 views
6

Можно ли создать тень вокруг UIVisualView с UIBlurEffect, не позволяя UIVisualView окрашиваться под тенью внизу?Создайте тень вокруг UIVisualEffectView, не закрывая весь вид.

я в основном просто хочу тень вокруг точки зрения, но с этим кодом тень будет охватывать весь вид, который затемняет весь взгляд на многое:

 let borderPath = UIBezierPath(roundedRect: view.bounds, byRoundingCorners: [.topLeft, .topRight], cornerRadii: CGSize(width: 15, height: 15)).cgPath 

    shadowView.frame = view.bounds 
    shadowView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    shadowView.layer.shadowOpacity = 0.3 
    shadowView.layer.shadowRadius = 3.0 
    shadowView.backgroundColor = UIColor.clear 

    shadowView.layer.shadowPath = borderPath 
    shadowView.layer.shadowOffset = CGSize(width: 0, height: 0) 
    self.view.insertSubview(shadowView, at: 0) 

    let blurEffect = UIBlurEffect(style: .extraLight) 
    let blurView = UIVisualEffectView(effect: blurEffect) 
    blurView.frame = view.bounds 
    blurView.autoresizingMask = [.flexibleWidth, .flexibleHeight] 
    blurView.clipsToBounds = true 
    blurView.layer.cornerRadius = 15 
    view.insertSubview(blurView, aboveSubview: shadowView) 

EDIT.
Мне нужно добиться того же, что и в приложении Apple Maps. Там, где перетаскиваемый любимый вид использует UIVisualEffectView и тень вокруг его вершины, не мешая фону UIVisualEffectView.

Смотрите пример скриншоты: enter image description here enter image description here

+0

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

+0

Я не понимаю, что вы имеете в виду. Пожалуйста, покажите мне пример. – alengqvist

ответ

2

Ok, так что проблема в том, что мой фон подстилающей взгляд был белым. И с UIBlurEffect .extraLight, используемым на фоне, который легче, чем BlurEffect, тень под UIVisualView выглядит темнее, чем с более ярким фоном.

Также описано в этом вопросе:
Fix UIVisualEffectView extra light blur being gray on white background

UPDATE

Я нашел проект, объясняющий, как решить эту проблему на Github решение предполагает создание 9-часть UIImage представлять тень. Создатель также объясняет основные слои карт iOS 10.

+0

Есть ли решение для белого/прозрачного фона? – ronhippler

+0

Я думаю, вы можете попытаться разрезать тень, чтобы внешний вид тени появлялся, а внутренняя часть тени ясна. – alengqvist

+0

Я также хочу знать решение ... – Rain

1

Так что я пытаюсь воссоздать внешний вид iOS 10 карт. Я решил прикрепить приложение карты в симуляторе отладчик, чтобы посмотреть, что происходит ...

View debugger breakdown

Apple, на самом деле обойти эту проблему, имея UIImage поверх содержания с границы и тень. Не самый элегантный способ сделать это, но я собираюсь найти точный вид, поэтому я собираюсь принять точный подход.

Я также захватил актив (используя this) из приложения «Карты», чтобы сохранить собственный. Стыд у них есть только @ 2x произведения искусства в нем, хотя:/

CardShadowFull@2x.png

+0

Вы достигли какого-либо прогресса в воссоздании карт iOS10 в своем проекте? – alengqvist

+0

@alengqvist: Я только хотел воспроизвести внешний вид этой границы и выполнил эту задачу. Следует отметить, что актив, который я заимствовал из приложения карт, имеет «специальный» нерегулярный радиус угла, поэтому он не будет выстраиваться в линию, если вы просто установите регулярное значение 'layer.cornerRadius' – liamnichols

+0

Небольшой вопрос, как вы подключили отладчик к приложению Apple Map? –

Смежные вопросы