【问题标题】:Draw a path with variable width in iOS在 iOS 中绘制可变宽度的路径
【发布时间】:2014-01-22 11:11:05
【问题描述】:

我正在做一个写作应用程序,我的写作工作正常,但我想要实现的是可变笔画宽度,这样写作就非常逼真和直观,就像“BAMBOO”和“PENULTIMATE”应用程序。

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

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

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

3) 这很好用,但是这里发生的情况是,当我移动得更快时宽度会增加,而当我移动得更慢时宽度会减小。但我想要的是相反的效果,即当我移动较慢时宽度应该增加,而当我快速移动时,厚度应该只在边缘和整条线上看到。

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

1)BAMBOO 应用程序

在上图中,线条是快速绘制的,您会看到粗细仅在边缘处。

2) 我的应用程序

在这里您会看到线条的边缘较细,而其他地方的线条较粗。

所以,这是我的疑问

1) 除了我尝试过的方法之外,他们还有什么更好的方法来满足我的要求吗?

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

问候 兰吉特

【问题讨论】:

  • 看来你快到了,只需修改将宽度更改为对速度的相反依赖性的代码
  • 嘿大卫,我没听懂,你能在代码中指出需要改变的地方吗?
  • 该问题的答案在您链接到的同一篇文章中。我刚刚搜索了“宽度”这个词(见我的回答)。这真的是你自己应该能够做到的事情。
  • 嘿@DavidRönnqvist,不是这样,我没有看到这个,但这里的问题是当我们写得很仔细时,写作变得很奇怪。你能解释一下为什么会发生这种情况吗?

标签: ios uikit core-graphics uibezierpath


【解决方案1】:

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

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

这个的最终版本似乎与第一个版本相反。当用户移动得更慢而不是更细时,我希望线条更粗。 我在哪里更改代码以反转最终变化的粗细来执行或像笔一样?这意味着用户移动得越慢,笔放下的墨水就越厚或更多......谢谢!很棒的教程,顺便说一句...

答案是:

感谢您的精彩教程!

通过这些更改,我得到了相反的线宽变化效果:

#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: 内部)

【讨论】:

  • 检查一下,我会回复你的
  • 我试过了,它可以工作,但写作很糟糕。我认为我需要使用 FF、LOWER 和 UPPER 值。说啥?。如果我写得慢,就会变得很厚很奇怪。
  • 你好@David,你能帮我解决这个问题吗
  • Helo @David,我没听懂你,你在传达什么。
【解决方案2】:

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

– locationInView:
– previousLocationInView:

以下属性

@property(nonatomic, readonly) NSTimeInterval timestamp

从上面,我认为你可以很容易地计算速度。我没有通过任何提到的链接。我只是想让你知道如何根据触摸对象计算速度。

【讨论】:

  • 鉴于 OP 发布了他的结果的屏幕截图,我假设他已经完成了速度计算。
  • 是的,正如你所说,这是一个“假设”。据他所知,我在上面提到过,这样他就不需要依赖其他代码了。
  • 那么你觉得这回答了 OP 的问题还是更多的信息
  • 嘿,谢谢 santhu,为您提供信息,但是我发布的链接有一个很好的算法,我现在正在关注它。并且正在考虑修改它。所以你有什么要说的。
  • 你好@santhu,你有什么要说的?
猜你喜欢
  • 2013-03-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-20
  • 1970-01-01
  • 2015-04-21
  • 1970-01-01
  • 2012-03-04
  • 2023-03-03
相关资源
最近更新 更多