如何在iOS中与CAShapeLayers相交

时间:2018-12-15 15:40:46

标签: ios swift cashapelayer cgrect

我有一个加号(+),目前正以蓝色显示,但是我想使其透明,以便用户可以看到背景。加层添加到更大的视图。将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)
    }
}

enter image description here

如何使加号透明?

2 个答案:

答案 0 :(得分:1)

尝试使用带有+透明效果的.png图像,它将正常工作,并且您无需绘制加号。

答案 1 :(得分:1)

您可以通过以下方式实现这一目标:

  1. 创建圈子import sys from PyQt5.QtWidgets import * class widget(QWidget): def __init__(self): super().__init__() treewidget = QTreeWidget(self) label = QLabel(self) label.setStyleSheet("background-color: white; min-height: 200px;") grid = QGridLayout() grid.setSpacing(10) grid.addWidget(treewidget, 1, 0) grid.addWidget(label, 2, 0) self.setLayout(grid) self.show() if __name__ == '__main__': app = QApplication(sys.argv) f = widget() sys.exit(app.exec_()) CAShapeLayer);
  2. 创建与circleShape相同颜色的倒置蒙版层(inverted)。在这种情况下,您需要一个circleShape,它具有完全相同的圆路径和加路径。另外,不要忘记设置CGMutablePath;
  3. 不需要一个仅带有透明加号(inverted.fillRule = .evenOdd)的图层;
  4. 添加plusShape作为子图层以查看图层;
  5. 设置掩码:circleShape
  6. 添加circleShape.mask = inverted作为子图层以查看图层。

就是这样!现在您有了透明加唱歌。示例:

enter image description here