用户使用自定义笔尖或笔划图像绘制线条/路径?[Swift |目标C | iOS]
用户画一条线和点/虚线是非常直接的。我可以通过以下方式做到这一点:用户使用自定义笔尖或笔划图像绘制线条/路径?[Swift |目标C | iOS],ios,objective-c,swift,drawing,paint,Ios,Objective C,Swift,Drawing,Paint,用户画一条线和点/虚线是非常直接的。我可以通过以下方式做到这一点: context.addPath(path) context.setLineCap(.round) context.setLineWidth(action.strokeWidth) context.setLineDash(phase: 0, lengths: [6, 9]) context.setStrokeCo
context.addPath(path)
context.setLineCap(.round)
context.setLineWidth(action.strokeWidth)
context.setLineDash(phase: 0, lengths: [6, 9])
context.setStrokeColor(action.color.cgColor)
context.setBlendMode(.normal)
我试图实现的是使用自定义画笔尖或图案绘制用户生成的线条/曲线。我试着做一些类似于colorWithPatternImage的事情,但这并不能解决我的问题,因为它只是用纹理图像填充视图的背景,而不是线条本身。比如:
context.addPath(path)
context.setLineCap(.round)
context.setLineWidth(action.strokeWidth)
context.setLineDash(phase: 0, lengths: [6, 9])
context.setStrokeColor(action.color.cgColor)
context.setBlendMode(.normal)
我想完成的笔刷笔划示例图像:
你对我如何做到这一点有什么建议吗?非常感谢你 我强烈推荐阅读,因为有几种解决方案。有些涉及着色器,有些则使用
cgpatterDrawPatternCallback
函数,其中存在堆栈溢出问题。在swift中如何实现这一点,我强烈建议阅读,因为有几种解决方案。一些涉及着色器,一些会使用CGPatternDrawPatternCallback
函数,这里有一个stackoverflow如何在swift中实现这一点我在一个包含徒手绘制功能的项目中工作,我发现没有任何源代码或示例可以学习如何使用自定义笔刷,然后,在研究了很多关于核心图形的主题并花了几天时间进行测试之后,我找到了一个解决方案,可以创建自定义笔刷,如spray或任何您想要的图案
所有这些画笔都可以用画笔画。这个操作的逻辑是,不用做硬数学和计算像素,只需在这种类型的图层上绘制图案图像,然后将这个家伙传递给你,你就会看到你想要的。在给出示例代码让您更好地理解之前,让我与您共享此信息
苹果说:
不再推荐CGLayer(因为它不稳定)
这就是为什么在商业项目中使用它之前要三思而后行
仅供参考:此代码未经测试,因此如果有问题,请在您身边更正,因为我的目的只是分享我在该主题上的知识。
奖金:-
为了消除不同颜色的图案的不必要副本,请使用此UIImage扩展功能重新为图案上色
func maskWithColor(color: UIColor) -> UIImage? {
let maskImage = cgImage!
let width = size.width
let height = size.height
let bounds = CGRect(x: 0, y: 0, width: width, height: height)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
context.clip(to: bounds, mask: maskImage)
context.setFillColor(color.cgColor)
context.fill(bounds)
if let cgImage = context.makeImage() {
let coloredImage = UIImage(cgImage: cgImage)
return coloredImage
} else {
return nil
}
}
正如您所看到的,使用CGLayer是多么容易。现在,您可以创建自定义画笔,只要传递一个UIImage[应该是png]
快乐编码…我在做一个包含徒手画功能的项目,我发现没有任何源代码或示例可以学习如何制作自定义画笔,然后,在研究了很多关于核心图形的主题并花了几天时间进行测试之后,我找到了一个解决方案,可以创建自定义笔刷,如spray或任何您想要的图案 所有这些画笔都可以用画笔画。这个操作的逻辑是,不用做硬数学和计算像素,只需在这种类型的图层上绘制图案图像,然后将这个家伙传递给你,你就会看到你想要的。在给出示例代码让您更好地理解之前,让我与您共享此信息 苹果说: 不再推荐CGLayer(因为它不稳定) 这就是为什么在商业项目中使用它之前要三思而后行 仅供参考:此代码未经测试,因此如果有问题,请在您身边更正,因为我的目的只是分享我在该主题上的知识。 奖金:- 为了消除不同颜色的图案的不必要副本,请使用此UIImage扩展功能重新为图案上色
func maskWithColor(color: UIColor) -> UIImage? {
let maskImage = cgImage!
let width = size.width
let height = size.height
let bounds = CGRect(x: 0, y: 0, width: width, height: height)
let colorSpace = CGColorSpaceCreateDeviceRGB()
let bitmapInfo = CGBitmapInfo(rawValue: CGImageAlphaInfo.premultipliedLast.rawValue)
let context = CGContext(data: nil, width: Int(width), height: Int(height), bitsPerComponent: 8, bytesPerRow: 0, space: colorSpace, bitmapInfo: bitmapInfo.rawValue)!
context.clip(to: bounds, mask: maskImage)
context.setFillColor(color.cgColor)
context.fill(bounds)
if let cgImage = context.makeImage() {
let coloredImage = UIImage(cgImage: cgImage)
return coloredImage
} else {
return nil
}
}
正如您所看到的,使用CGLayer是多么容易。现在,您可以创建自定义画笔,只要传递一个UIImage[应该是png]
快乐编码…