Оставьте тень позади нескольких UIViews - PullRequest
0 голосов
/ 27 мая 2018

В этом представлении

this

существует несколько подпредставлений.Теперь я настроил виды для отбрасывания тени, как показано на скриншоте: виды отбрасывают тень и на другие виды.Вы видите способ легко отбросить тень за всеми видами ?Таким образом, z-индекс всех теней

Я уже пытался создать дополнительный вид для каждого блока и поместил все эти виды теней за всеми блоками.Этот вид работ.Но при перемещении коробок с помощью PanGesture не хватает.Также этот дизайн выглядит грязным.На данный момент ясно, что для каждого блока должен быть один UIView.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Вы можете просто добавить виды с тенью сначала, а затем добавить фактический вид над ними.Или вы можете попытаться изменить zPosition из layer всех видов после установки теней.

0 голосов
/ 01 июня 2018

Вы думаете о решении неправильно.Однако, по вашим собственным словам, ответ «позади всех представлений».

Как вы заметили, применение тени к каждому представлению будет иметь перекрывающиеся тени из-за каждого представления z-index.

Выупомянуто создание дополнительного представления для каждого окна, которое близко к другому решению, но не совсем.Вы можете создать один контейнерный вид и поместить все блоки внутри этого одного контейнерного вида.Затем примените свою тень к виду контейнера.Это даст вам ваш результат, но будет иметь ужасную производительность!Каждый раз, когда вызывается layoutSubviews, например, когда изменяется рамка просмотра, тени пересчитываются.Как вы упомянули, вы используете жест панорамирования, поэтому, слегка перемещая прямоугольник, вы разметите подпредставления несколько десятков раз.

Решение, с которым вы должны пойти, - создать 2 контейнерных представления, которые являются родственными представлениями.Для каждого цветного представления, которое вы создаете, добавьте его в представление верхнего контейнера и создайте другое представление, которое будет добавлено в представление нижнего контейнера, назовем его представлением теневого контейнера.Используйте ограничения для представлений внутри теневого контейнера, чтобы их верх, ведущий, нижний и конечный были равны их эквивалентному представлению в представлении верхнего контейнера.Затем добавьте тень к видам внутри теневого контейнера и убедитесь, что вы применили layer.shadowPath!Этот путь тени является ключом для предотвращения перерисовки тени при панорамировании.

Если вы не понимаете и нуждаетесь в примере, дайте мне знать, и я дам вам один.

0 голосов
/ 27 мая 2018

Привет, Крис, попробуй

yourView.layer.shadowColor = UIColor(white: 0.0, alpha: 0.5).CGColor
yourView.layer.shadowOffset = CGSizeMake(0.0, 0.0)
yourView.layer.shadowOpacity = 1.0
yourView.layer.shadowRadius = 6.0 //increase the width & height of shadow
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...