在iOS中绘制一个宽度可变的path

我正在写一个应用程序,我的写作工作正常,但是我想实现的是可变的笔画宽度 ,所以写作是非常现实和直观的,如“ BAMBOO ”和“ PENULTIMATE ”应用程序所做的。

首先,我想告诉你我曾经尝试过什么。

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

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

3)这工作正常,但是这里发生的是,随着我移动速度越来越快,越来越慢,宽度越来越大。 但是我想要的是相反的效果,就是宽度应该随着移动速度的增加而增加,当我快速移动时,厚度只能看到边缘和整个线条。

这里是BAMBOO应用程序和我的应用程序的屏幕截图。

1)BAMBOO应用程序

在这里输入图像说明

在上面的图片中,线条的绘制速度很快,您会看到厚度仅在边缘。

2)我的APP

在这里输入图像说明

在这里,你会看到这条线在边缘更薄,而其他地方更厚。

所以,这是我的疑惑

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

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

关心Ranjit

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

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

这个最终版本似乎与第一个版本相反。 当用户移动较慢而不是较薄时,我希望线条变粗。 我在哪里改变代码来反转最后变化的厚度来执行或像笔? 意思是用户移动的越慢,墨水笔越厚,谢谢! 伟大的教程,顺便说一句…

答案是:

感谢伟大的教程!

有了这些变化,我得到了相反的线宽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 =”的相同链接中的另一个search表明,这个改变应该应用于第76-78行(在文章的代码中的touchesMoved:withEvent:内的某处)

在touchesBegan:方法中,提供了UItouch。
UITouch具有以下实例function,

 – locationInView: – previousLocationInView: 

以下属性

 @property(nonatomic, readonly) NSTimeInterval timestamp 

从以上我认为你可以很容易地计算velocity.I没有经过任何提到的链接。我只是想给你一个基于触摸对象如何计算function的想法。