1

我有一个我制作UIViewexpand功能。当我调用这个函数时,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
}
4

1 回答 1

1

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

于 2018-07-18T17:29:59.470 回答