我正在写一个写作应用程序,我的写作工作正常,但我想要实现的是可变笔画宽度,因此写作非常逼真和直观,如“< strong> BAMBOO “和” PENULTIMATE “申请。
首先,我想告诉你我的尝试。
1)在iOS中,根据我的研究,它们没有压力检测或速度检测。对于速度检测,我必须使用OPENGL。
2)由于这些限制,我尝试使用本教程中给出的方法非常简单。这里是链接http://mobile.tutsplus.com/tutorials/iphone/ios-sdk-advanced-freehand-drawing-techniques/
3)这很好用,但在这里发生的事情就是,当我移动得越来越快时,宽度越来越大,随着我移动得越来越慢。但我想要的是相反的效果,即当我移动得更慢时宽度应该增加,当我快速移动时,厚度应该只在边缘和整条线上看到。
以下是BAMBOO应用程序和我的应用程序的屏幕截图。
1)BAMBOO app
在上图中,线条以速度绘制,您将看到厚度仅在边缘处。
2)我的APP
在这里,您将看到边缘处的线条较薄,而其他位置处的线条较粗。
所以,这是我的怀疑
1)除了我的尝试之外,他们是否有更好的方法来满足我的要求。
2)如果我尝试过,是解决问题的正确方法,那么我需要做出哪些改变才能达到预期的效果。
此致 Ranjit
答案 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
从上面看,我认为你可以很容易地计算出速度。我没有通过任何提到的链接。我只是想让你了解如何根据触摸物体计算速度。