在iOS中绘制宽度可变的路径

时间:2014-01-22 11:11:06

标签: ios uikit core-graphics uibezierpath

我正在写一个写作应用程序,我的写作工作正常,但我想要实现的是可变笔画宽度,因此写作非常逼真和直观,如“< strong> BAMBOO “和” PENULTIMATE “申请。

首先,我想告诉你我的尝试。

1)在iOS中,根据我的研究,它们没有压力检测或速度检测。对于速度检测,我必须使用OPENGL。

2)由于这些限制,我尝试使用本教程中给出的方法非常简单。这里是链接http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-advanced-freehand-drawing-techniques/

3)这很好用,但在这里发生的事情就是,当我移动得越来越快时,宽度越来越大,随着我移动得越来越慢。但我想要的是相反的效果,即当我移动得更慢时宽度应该增加,当我快速移动时,厚度应该只在边缘和整条线上看到。

以下是BAMBOO应用程序和我的应用程序的屏幕截图。

1)BAMBOO app

enter image description here

在上图中,线条以速度绘制,您将看到厚度仅在边缘处。

2)我的APP

enter image description here

在这里,您将看到边缘处的线条较薄,而其他位置处的线条较粗。

所以,这是我的怀疑

1)除了我的尝试之外,他们是否有更好的方法来满足我的要求。

2)如果我尝试过,是解决问题的正确方法,那么我需要做出哪些改变才能达到预期的效果。

此致 Ranjit

2 个答案:

答案 0 :(得分:2)

如何扭转宽度行为和(甚至与您的问题相同的问题)的答案就在您发布的链接中。我所做的只是搜索“宽度”这个词

问题(我的突出显示不是引用的一部分):

  

这个版本的最终版本似乎与第一个版本相反。我希望线条更粗,因为用户移动得更慢而不是更薄。 我在哪里更改代码以反转最终变化的厚度以执行或像笔一样?意味着用户移动较慢或更多墨水的速度越慢...谢谢!伟大的教程,顺便说一句......

答案是:

  

感谢伟大的教程!

     

通过这些更改,我获得了相反的线宽cahnge效果:

#define CAPACITY 100
#define FF 20.0
#define LOWER 0.01
#define UPPER 1.5

float frac1 = clamp(FF/len_sq(pointsBuffer[i], pointsBuffer[i+1]), LOWER, UPPER); // ................. (4)
float frac2 = clamp(FF/len_sq(pointsBuffer[i+1], pointsBuffer[i+2]), LOWER, UPPER);
float frac3 = clamp(FF/len_sq(pointsBuffer[i+2], pointsBuffer[i+3]), LOWER, UPPER);

在文本“float frac1 =”的同一链接中的另一个搜索显示此更改应该应用于第76-78行(在文章的代码中touchesMoved:withEvent:中的某处)

答案 1 :(得分:0)

在你的touchesBegan:方法中,提供了UItouch UITouch具有以下实例函数,

– locationInView:
– previousLocationInView:

以下属性

@property(nonatomic, readonly) NSTimeInterval timestamp

从上面看,我认为你可以很容易地计算出速度。我没有通过任何提到的链接。我只是想让你了解如何根据触摸物体计算速度。