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
不是其中之一。你必须自己制作动画。
我有一个 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
不是其中之一。你必须自己制作动画。