В подклассе UIView
у меня есть следующее переопределение свойства для override var bounds: CGRect
:
@IBDesignable
class GEView: UIView {
private var shadowView: UIView? {
didSet {
guard let superview = superview else { return }
guard let shadowView = self.shadowView else { return }
// Add the shadow to the superview, as the shadow cannot
// also allow rounded corners simultaneously
superview.addSubview(shadowView)
shadowView.layer.zPosition = layer.zPosition - 1
shadowView.edges(to: self)
}
}
// CALLED WHEN SETTING @IBInspectable PROPERTIES
/// Creates a shadow if one has not yet been created.
private func createShadowIfNeeded() {
guard shadowView == nil else { return }
shadowView = UIView()
shadowView?.layer.shadowPath = UIBezierPath(roundedRect: bounds,
cornerRadius: cornerRadius).cgPath
shadowView?.layer.shouldRasterize = true
}
// THE PROPERTY TO ATTEMPT THE SHADOW MOVING
override var bounds: CGRect {
didSet {
shadowView?.layer.shadowPath = UIBezierPath(roundedRect: bounds,
cornerRadius: cornerRadius).cgPath
}
}
}
Попытка состояла в том, чтобы повторно рисовать тень много раз при изменении границ, когда ограничения видаанимированные (что приводит к изменению размера представления).
Однако границы изменяются мгновенно, так как анимация только визуальная.Есть ли способ, которым я могу заставить эту тень следовать за изображением, поскольку оно оживляет?Было бы лучше, если бы это могло быть в подклассе UIView
вместо блока анимации, то есть UIView.animate
.
Вот как выглядит проблема:
Я хочу, чтобы тень следовала, пока вид движется.В конце gif позиция тени и позиция просмотра верны, потому что переопределение игнорирует анимацию и делает вид, что оно уже анимировано.
Как это исправить?