UIView 动画 shadowPath 不遵循

UIView animation shadowPath doesn't follow

我有一个 UIView 和我制作的 expand 函数。 当我调用这个函数时,UIView 保持居中,我扩展了它的宽度。

问题是我的 UIView 有一个 shadow,有一个 shadowPath。每当我展开它时,阴影都会立即展开到视图在动画结束时获得的最大宽度,而不是跟随边界。

func expand() {
    guard self.expanded == false else {
        return
    }

    let originX = self.frame.origin.x
    let originY = self.frame.origin.y
    let originWidth = self.frame.width
    let originHeight = self.frame.height
    let newWidth = self.frame.width * 2

    let newRect = CGRect(x: originX - ((newWidth - originWidth) / 2), y: originY, width: newWidth, height: originHeight)

    self.expanded = true

    UIView.animate(withDuration: 0.4, animations: {
        self.frame = newRect
        self.layoutIfNeeded()
    }) { (completed) in
    }
}


override func layoutSubviews() {
    super.layoutSubviews()
    self.layer.shadowPath = UIBezierPath(roundedRect: self.bounds, cornerRadius: self.layer.cornerRadius).cgPath
}

UIView 显式(但私下)选择其图层的哪些属性进行隐式动画,而 shadowPath 不是其中之一。你必须自己制作动画。