Как предотвратить удвоение и утолщение теней двух сложенных изображений? [Быстро]

#ios #swift #xcode #uiview #shadow

Вопрос:

У меня есть две карты (UIViews) , которые сложены прямо друг на друга. На обеих картах нанесены тени, используя следующий стиль:

 static func styleCardView(_ cardStyle: UIView) {
    cardStyle.layer.shadowOpacity = 1
    cardStyle.layer.shadowOffset = CGSize(width: 0, height: 1.75)
    cardStyle.layer.shadowRadius = 1.7
    cardStyle.layer.shadowColor = UIColor.lightGray.cgColor
    cardStyle.layer.cornerRadius = 12 
}
 

После того, как я перетаскиваю верхнюю карту с экрана (UIPanGesture), настройка карт сбрасывается, чтобы они снова были сложены в центре, как вы можете видеть на приведенном ниже gif:

GIF с теневой проблемой

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

Проблема в том, что тень начальной точки (обе сложенные карты) слишком толстая, потому что обе тени карт накладываются друг на друга. Затем, когда верхняя карта исчезает с экрана, видна только тень нижней карты. Однако, когда верхняя карта сбрасывается в середину, толщина тени меняется, и сброс карты очевиден.

Есть ли какой-либо способ установить максимальную видимую толщину тени или предотвратить скопление теней?

Комментарии:

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

2. @Rengers — Спасибо. Я использовал что-то подобное в качестве обходного пути: if (Double(abs(xFromCenter)) Double(abs(yFromCenter))) > 0 { styleCardView(cardView) } else { styleCardViewNoShadow(cardView) } пока это работает, но я надеялся, что будет более простой способ сделать это.