被一个圆形 slider 困扰两天了

2015-06-04 15:47:25 +08:00
 SeanChense
在项目里需要实现一个圆形的 slider 来设置倒计时间。用手滑动一圈就相当于设置了一个小时倒计时,两圈就是两小时。我找到了一个叫 EFCircularSlider 的开源库,圆形滑动样样都有了。关键就在于如何判断用户滑满一圈。


可以使用 currentValue 来得到当前值,如果简单的判断 currentValue 是否等于最大值 60 来判断是否满一圈会有问题,如果从 0 附近逆时针转回来 currentValue 的值又会再次马上从 0 变成 60。

另外,如果用户滑动的非常快,currentValue 的值可能从 49.0000 直接跳到 8.0000 了,直接跳过 60 这个节点值。

如果设置一个区间,满足这个区间就判定为满一圈,那 currentValue 在速度比较慢的时候一到达左端点就满一圈了。


要是 currentValue 达到 60 可以不清零就好了。

于是开始看源码怎么实现了,看懂了大概,改了改没达到目的 😄😄




遇到这种需求,你们怎么做的呢?
3892 次点击
所在节点    iDev
29 条回复
SeanChense
2015-06-04 20:49:46 +08:00
@GordianZ 就相当于把整个圆周化成了 12 离散的点,动一下就进一格。逆时针从 1 点钟方向回到 11 点方向是最复杂的了,一方面要判断方向另一方面要判断有没有倒着回到 12 点这个位置来给小时数减一。我现在建议一整个圈代表二十四个小时,划满就清零。这样最简单省事了 我也是刚刚下了个闹钟应用看到是这么做的。
Elethom
2015-06-04 22:42:38 +08:00
@SeanChense
這是一個很簡單的問題,你自己沒有想清楚而已。
SeanChense
2015-06-04 23:36:16 +08:00
@Elethom 既然您这么说,那便是有解决办法了。I will work it out.
int64ago
2015-06-04 23:54:01 +08:00
其实并没有滑动一圈,那个只有上下左右。。。
kinwa
2015-06-05 16:02:14 +08:00
android的闹钟就是这样设置的,当然是有刻度的。还有数字。原生系统就是这样的。
SeanChense
2015-07-15 13:07:53 +08:00
@Elethom 我现在还是卡在超过 100% 的判断上。您能详细说说吗?
Elethom
2015-07-15 15:55:20 +08:00
@SeanChense
拖一個多月也是醉,不用賠違約金麼。重點根本不在於是否超過 100%,而是連續的兩個點判斷增加還是減少。
Elethom
2015-07-15 16:13:19 +08:00
算了我再解釋一下吧。
比如連續的兩個點相對於 12 點方向的 radian,currentRad 和 lastRad。
增加時有兩種可能
1. (currentRad > lastRad && currentRad - lastRad < M_PI)
2. (currentRad < lastRad && lastRad - currentRad > M_PI)
1 || 2 的時候可以看做是增加,反之則是減少,且 1 不跨過 12 點方向圈數不增加,2 跨過 12 點方向圈數增加,至於你圈數和當前 radian 是否分別存儲就隨意了。
SeanChense
2015-07-15 17:52:18 +08:00
@Elethom 谢谢,我继续试试

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/196100

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX