使用 Quartz 2D 绘制流畅的线条
Drawing Smooth lines with Quartz 2D
我正在创建一个演示 IOS 应用程序,它将是一个简单的绘图应用程序。我已经使用 Quartz 2D 创建了一个基本的应用程序。然而,绘制的线条非常参差不齐。我正在寻找一种应用抗锯齿或混合以使线条平滑的方法。 drawLineFrom 看起来像这样:
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {
UIGraphicsBeginImageContext(view.frame.size)
let context = UIGraphicsGetCurrentContext()
tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y)
CGContextAddLineToPoint(context, toPoint.x, toPoint.y)
CGContextSetAllowsAntialiasing(context, true)
CGContextSetShouldAntialias(context, true)
CGContextSetLineCap(context, kCGLineCapRound)
CGContextSetLineWidth(context, brushWidth)
CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
CGContextSetBlendMode(context, kCGBlendModeNormal)
CGContextStrokePath(context)
tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
tempImageView.alpha = opacity
UIGraphicsEndImageContext()
}
项目可以在这里找到:https://github.com/BananaSplitio/OpenSketch
感谢您的帮助!
我知道我来晚了很多,但如果你改变了:
UIGraphicsBeginImageContext(view.frame.size)
到
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0f)
;
应该可以解决锯齿线问题。最后一个参数 0.0f
指定屏幕比例。将此设置为 0.0f
将自动将其设置为设备的分辨率。如果没有这个,它会用 1 点 = 1 像素(因此非视网膜)绘制它,导致东西看起来参差不齐。
我正在创建一个演示 IOS 应用程序,它将是一个简单的绘图应用程序。我已经使用 Quartz 2D 创建了一个基本的应用程序。然而,绘制的线条非常参差不齐。我正在寻找一种应用抗锯齿或混合以使线条平滑的方法。 drawLineFrom 看起来像这样:
func drawLineFrom(fromPoint: CGPoint, toPoint: CGPoint) {
UIGraphicsBeginImageContext(view.frame.size)
let context = UIGraphicsGetCurrentContext()
tempImageView.image?.drawInRect(CGRect(x: 0, y: 0, width: view.frame.size.width, height: view.frame.size.height))
CGContextMoveToPoint(context, fromPoint.x, fromPoint.y)
CGContextAddLineToPoint(context, toPoint.x, toPoint.y)
CGContextSetAllowsAntialiasing(context, true)
CGContextSetShouldAntialias(context, true)
CGContextSetLineCap(context, kCGLineCapRound)
CGContextSetLineWidth(context, brushWidth)
CGContextSetRGBStrokeColor(context, red, green, blue, 1.0)
CGContextSetBlendMode(context, kCGBlendModeNormal)
CGContextStrokePath(context)
tempImageView.image = UIGraphicsGetImageFromCurrentImageContext()
tempImageView.alpha = opacity
UIGraphicsEndImageContext()
}
项目可以在这里找到:https://github.com/BananaSplitio/OpenSketch
感谢您的帮助!
我知道我来晚了很多,但如果你改变了:
UIGraphicsBeginImageContext(view.frame.size)
到
UIGraphicsBeginImageContextWithOptions(view.frame.size, NO, 0.0f)
;
应该可以解决锯齿线问题。最后一个参数 0.0f
指定屏幕比例。将此设置为 0.0f
将自动将其设置为设备的分辨率。如果没有这个,它会用 1 点 = 1 像素(因此非视网膜)绘制它,导致东西看起来参差不齐。