删除在视图上绘制的线

Remove line drawn on view

我是 CoreGraphics 的新手。我正在尝试创建包含两个以编程方式添加到滚动视图中的 UIImageview 的视图。添加后我想用线连接两个中心。我使用了 bezier 路径以及 CAShapelayer。但是线也在 UIImageview 上绘制,所以我想删除 UIImageview 上方的线或将线发送回 UIImageview。我已经完成了以下代码。

  let path: UIBezierPath = UIBezierPath()
    path.moveToPoint(CGPointMake(personalProfile.center.x, personalProfile.center.y))
    path.addLineToPoint(CGPointMake(vwTwo.center.x, vwTwo.center.y))

    let shapeLayer: CAShapeLayer = CAShapeLayer()
    shapeLayer.path = path.CGPath
    shapeLayer.strokeColor = UIColor.blueColor().CGColor
    shapeLayer.lineWidth = 3.0
    shapeLayer.fillColor = UIColor.clearColor().CGColor

    self.scrollView.layer.addSublayer(shapeLayer)   

请同时查看屏幕截图,我想删除蓝线的红色标记部分。

我会看到 2 个选项,一个简单的选项和一个较难的选项。

  1. 画线后将UIImageView移到前面,有效地将线隐藏在UIImageView后面。
  2. 计算您希望线条开始和结束的点,并从这些点而不是中心绘制一条线。

您只需减少 shapeLayer

zPosition 即可做到这一点

这将允许在您的两个视图下方绘制图层(并且比尝试计算线的新起点和终点容易得多)。如果你 look at the documentation for zPosition:

The default value of this property is 0. Changing the value of this property changes the the front-to-back ordering of layers onscreen. Higher values place this layer visually closer to the viewer than layers with lower values. This can affect the visibility of layers whose frame rectangles overlap.

因此,因为它默认为 0,而 UIViews 只是 CALayers 的包装器,您可以在 shapeLayer 上使用值 -1 以便把它画在你的其他观点后面。

例如:

shapeLayer.zPosition = -1

旁注

在 Swift 中的大多数情况下,您不需要在定义变量时显式提供类型。你可以让 Swift 推断它。例如:

let path = UIBezierPath()