如何在 iOS 中与 CAShapeLayers 相交
How to intersect CAShapeLayers in iOS
我有一个加号 (+) 当前颜色为蓝色,但我想让它透明以便用户可以看到背景。加层被添加到更大的视图中。将plus层设置为clear
颜色并不能解决问题
class AddButtonView: UIView {
...
private func setupPlusLayer() {
let path = UIBezierPath()
path.move(to: CGPoint(x: plusButton.frame.midX, y: plusButton.frame.midY-20))
path.addLine(to: CGPoint(x: plusButton.frame.midX, y: plusButton.frame.midY+20))
path.move(to: CGPoint(x: plusButton.frame.midX-20, y: plusButton.frame.midY))
path.addLine(to: CGPoint(x: plusButton.frame.midX+20, y: plusButton.frame.midY))
path.usesEvenOddFillRule = true
let shapeLayer = CAShapeLayer()
shapeLayer.fillRule = .evenOdd
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.lineWidth = 4
// Add that `CAShapeLayer` to your view's layer:
self.layer.addSublayer(shapeLayer)
}
}
如何使加号透明?
尝试使用带有 + 的 .png 图像透明它会工作正常,您将不需要绘制加号。
您可以通过以下方式实现:
- 创建圈子
CAShapeLayer
(circleShape
);
- 创建与
circleShape
颜色相同的反转遮罩层 (inverted
)。对于这种情况,您需要 CGMutablePath
具有完全相同的圆形路径和加号路径。另外,不要忘记设置 inverted.fillRule = .evenOdd
;
- 比你需要一个只有透明加号的图层 (
plusShape
);
- 添加
circleShape
作为视图图层的子图层;
- 设置掩码:
circleShape.mask = inverted
;
- 添加
plusShape
作为视图图层的子图层。
就是这样!现在你有透明加唱歌。示例:
我有一个加号 (+) 当前颜色为蓝色,但我想让它透明以便用户可以看到背景。加层被添加到更大的视图中。将plus层设置为clear
颜色并不能解决问题
class AddButtonView: UIView {
...
private func setupPlusLayer() {
let path = UIBezierPath()
path.move(to: CGPoint(x: plusButton.frame.midX, y: plusButton.frame.midY-20))
path.addLine(to: CGPoint(x: plusButton.frame.midX, y: plusButton.frame.midY+20))
path.move(to: CGPoint(x: plusButton.frame.midX-20, y: plusButton.frame.midY))
path.addLine(to: CGPoint(x: plusButton.frame.midX+20, y: plusButton.frame.midY))
path.usesEvenOddFillRule = true
let shapeLayer = CAShapeLayer()
shapeLayer.fillRule = .evenOdd
shapeLayer.path = path.cgPath
shapeLayer.strokeColor = UIColor.blue.cgColor
shapeLayer.fillColor = UIColor.blue.cgColor
shapeLayer.lineWidth = 4
// Add that `CAShapeLayer` to your view's layer:
self.layer.addSublayer(shapeLayer)
}
}
如何使加号透明?
尝试使用带有 + 的 .png 图像透明它会工作正常,您将不需要绘制加号。
您可以通过以下方式实现:
- 创建圈子
CAShapeLayer
(circleShape
); - 创建与
circleShape
颜色相同的反转遮罩层 (inverted
)。对于这种情况,您需要CGMutablePath
具有完全相同的圆形路径和加号路径。另外,不要忘记设置inverted.fillRule = .evenOdd
; - 比你需要一个只有透明加号的图层 (
plusShape
); - 添加
circleShape
作为视图图层的子图层; - 设置掩码:
circleShape.mask = inverted
; - 添加
plusShape
作为视图图层的子图层。
就是这样!现在你有透明加唱歌。示例: