bezierpath 视图上的阴影为角落添加了奇怪的笔触
shadow on bezierpath view adds weird strokes to corners
我想重新创建 AppStore 的 "today" 带有圆角和浅色阴影的卡片。
我创建了一个路径、一个 maskLayer 和一个单独的 shadowLayer,根据多个消息来源,这就是这样做的方式。
然而,问题是我可爱的带阴影的圆角矩形的角上有一些灰色笔触。我该如何解决这个问题?我尝试了不同的阴影不透明度和不同的半径。它没有解决我的问题。
在这里你可以看到我的截图和下面的代码。
override func loadView() {
let view = UIView()
view.backgroundColor = .white
self.view = view
// create sample view and add to view hierarchy
let bigTeaser = UIView(frame: CGRect(x: 16, y: 200, width: 343, height: 267))
bigTeaser.backgroundColor = UIColor.white
view.addSubview(bigTeaser)
// create the path for the rounded corners and the shadow
let roundPath = UIBezierPath(roundedRect: bigTeaser.bounds, cornerRadius: 20)
// create maskLayer
let maskLayer = CAShapeLayer()
maskLayer.frame = bigTeaser.bounds
maskLayer.path = roundPath.cgPath
bigTeaser.layer.mask = maskLayer
// create shadowLayer
let shadowLayer = CAShapeLayer()
shadowLayer.path = roundPath.cgPath
shadowLayer.frame = bigTeaser.frame
shadowLayer.shadowOpacity = 0.3
shadowLayer.shadowRadius = 24
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowOffset = CGSize(width: 0, height: 2)
// insert layers
bigTeaser.superview!.layer.insertSublayer(shadowLayer, below: bigTeaser.layer)
}
如果替换:
shadowLayer.path = roundPath.cgPath
至
shadowLayer.shadowPath = roundPath.cgPath
丑陋的边框会神奇地消失。
我想重新创建 AppStore 的 "today" 带有圆角和浅色阴影的卡片。
我创建了一个路径、一个 maskLayer 和一个单独的 shadowLayer,根据多个消息来源,这就是这样做的方式。
然而,问题是我可爱的带阴影的圆角矩形的角上有一些灰色笔触。我该如何解决这个问题?我尝试了不同的阴影不透明度和不同的半径。它没有解决我的问题。
在这里你可以看到我的截图和下面的代码。
override func loadView() {
let view = UIView()
view.backgroundColor = .white
self.view = view
// create sample view and add to view hierarchy
let bigTeaser = UIView(frame: CGRect(x: 16, y: 200, width: 343, height: 267))
bigTeaser.backgroundColor = UIColor.white
view.addSubview(bigTeaser)
// create the path for the rounded corners and the shadow
let roundPath = UIBezierPath(roundedRect: bigTeaser.bounds, cornerRadius: 20)
// create maskLayer
let maskLayer = CAShapeLayer()
maskLayer.frame = bigTeaser.bounds
maskLayer.path = roundPath.cgPath
bigTeaser.layer.mask = maskLayer
// create shadowLayer
let shadowLayer = CAShapeLayer()
shadowLayer.path = roundPath.cgPath
shadowLayer.frame = bigTeaser.frame
shadowLayer.shadowOpacity = 0.3
shadowLayer.shadowRadius = 24
shadowLayer.shadowColor = UIColor.black.cgColor
shadowLayer.shadowOffset = CGSize(width: 0, height: 2)
// insert layers
bigTeaser.superview!.layer.insertSublayer(shadowLayer, below: bigTeaser.layer)
}
如果替换:
shadowLayer.path = roundPath.cgPath
至
shadowLayer.shadowPath = roundPath.cgPath
丑陋的边框会神奇地消失。