Bezier路径不依赖于上下文

时间:2017-02-09 20:38:13

标签: ios swift

我正在尝试让我的用户精确选择他们在UIImage上触摸的一个点。 我左上角有一个放大镜,显示他们以2倍变焦触摸的位置。效果很好。

我正在尝试在放大区域的中心添加一个“十字准线”,以使选择更清晰。

使用下面的代码,不会看到任何行。

//Bulk of the magifying code    
public override func drawRect(rect: CGRect) {
        let context: CGContextRef = UIGraphicsGetCurrentContext()!
        CGContextScaleCTM(context, 2, 2)
        CGContextTranslateCTM(context, -self.touchPoint.x, -self.touchPoint.y)
        drawLine(context)
        self.viewToMagnify.layer.renderInContext(context)
}
//Code for drawing horizontal line of crosshair
private func drawLine(ctx: CGContext) {
    let lineHeight: CGFloat = 3.0
    let lineWidth: CGFloat = min(bounds.width, bounds.height) * 0.3
    let horizontalPath = UIBezierPath()
    horizontalPath.lineWidth = lineHeight
    let hStart = CGPoint(x:bounds.width/2 - lineWidth/2, y:bounds.height/2)
    let hEnd = CGPoint(x:bounds.width/2 + lineWidth/2,y:bounds.height/2)
    horizontalPath.moveToPoint(hStart)
    horizontalPath.addLineToPoint(hEnd)
    UIColor.whiteColor().setStroke()
    horizontalPath.stroke()
}

线可能被绘制但是太小或者没有我期望的那样。

我尝试过使用CGContextAddPath

等其他方式绘制线条

我认为问题可能与renderInContextView没有考虑我的绘图有关,或者我没有正确添加上下文的路径?

放大代码基于GJNeilson's work,我所做的就是将放大镜​​的中心点固定在左上方并移除遮罩。

1 个答案:

答案 0 :(得分:1)

我认为您正在绘制线条然后在其上绘制图像。最后尝试拨打drawLine

此外,当您绘制可能将其定位在屏幕外的线时,比例和平移仍然有效。您可能需要使用CGContextSaveGStateCGContextRestoreGState

重置它