如何使用Quartz绘制钢笔笔划?

Xun*_* Le 0 iphone quartz-graphics ios

我知道更好的方法是在OpenGL中使用纹理.但我仍然想在我的应用程序中使用Quartz绘制矢量图形.

我按照这个链接但它没有按预期工作.应用纹理来描边CGContextStrokePath 我可能误解了一些东西.

你能告诉我解决这个问题的方法吗?

Mr.*_*rna 6

我假设"钢笔笔划"是指根据曲线的方向变得更厚或更薄的笔划,即垂直时较厚而水平时较薄.

作为矢量图形的钢笔笔划可以是封闭的形状.取曲线并沿着钢笔尖的轴线以相反的方向偏移两个副本,每个钢笔尖的宽度的一半.关闭这些曲线,并用钢笔颜色或图案填充它们.水平笔尖四个像素宽将一个曲线偏移两个像素向右,第二个曲线偏移两个像素到左侧.未与轴对齐的笔尖可能需要一点三角法来计算精确的偏移.如果只使用预设的笔尺寸和角度,偏移可能会被整数偏移所捏造,看起来不错.

在曲线完全符合笔尖角度的情况下,形状可能会下降到最小所需行程厚度以下.这可以通过对这个派生形状应用笔划来解决,从而使得最终效果永远不会太薄.这可能使厚部件变厚,这可以通过改变偏移来调整.

编辑以响应关于如何使笔划的中心比边缘更暗的评论:

我可以想到几种方法来实现中风形状的较暗中心.可以绘制具有不同厚度的多个形状,彼此叠置.最厚的颜色可以填充最浅的颜色,最深的颜色可以填充.或者可以将原始路径的笔划绘制到图像,模糊,然后剪切到钢笔笔划形状.这可以绘制为具有多重混合模式的第二层,使笔划的中心变暗,并在边缘处逐渐变细.或者形状可以分成几个部分.沿着路径的每个小段可以填充渐变,该渐变从末端的光到中间的暗.

由于迦勒在他的回答中提到,有很多可以添加到一个模拟的钢笔真实世界的功能和性能其他方面.包含的方面越多,绘图代码就越复杂.