【发布时间】:2019-05-27 12:13:30
【问题描述】:
在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 结束时,阴影位置和视图位置是正确的,因为覆盖忽略了动画并假装它已经动画了。
我该如何解决这个问题?
【问题讨论】:
标签: ios swift uiview uiviewanimation shadow