返回列表 發帖

[iPhone] pan gesture相關問題

專案上寫了pan手勢,

往上與右滑判定為數字遞增,

往左與往下滑則為數字遞減,

但現在遇到兩個問題是,

問題1.

  當滑動完得到想要的數字後例如100,

  手指一離開螢幕數字會變101或102,

  沒辦法準確得到想要的數值,

  已經改寫了UIGestureRecognizerStateEnded但還是沒效果。

問題2.上下滑動的數值沒辦法精準的遞增或遞減

  例如向上滑動數值會在100 - 110打轉一陣子才繼續往上遞增

以下是我的程式碼:

http://pastebin.com/PfpGZNvE

想請問前輩這兩個小問題要如何解決呢? 謝謝
本帖最後由 dse12345z 於 2015-8-26 12:13 編輯

[問題 1]
問題:
PanGesture 的 Began, End 狀態下都還會做改變值的動作。

解決方法:
在你的 switch case 裡面加上 UIGestureRecognizerStateChanged 把下面你的 code 放進去。
  1. if (vel.x > 0)
  2.     {   // user dragged towards the right
  3.         vel.x = 0;
  4.         num++;
  5.     }
  6.     else if(vel.x < 0)
  7.     {   // user dragged towards the left
  8.         vel.x = 0;
  9.         num--;
  10.     }
  11.     else if(vel.y < 0)
  12.     {   // user dragged towards the up
  13.         vel.y = 0;
  14.         num++;
  15.     }
  16.     else if(vel.y > 0)
  17.     {   // user dragged towards the down
  18.         vel.y = 0;
  19.         num--;
  20.     }
複製代碼
[問題2]
沒有測出你這個問題@@
還是你往下又往右(指斜方向移動, 下減, 右增) 才會看到數據是上下浮動? 你可能需要掌控斜角方向。
我之前做過類似的, 我是依照座標象限來做值增減你參考看看。
1

評分人數

回復 2# dse12345z


昨天測試了一下似乎手勢滑動往斜上或斜下方就會出現這問題

log印出來如下網址  http://pastebin.com/SfLBKPGQ

請問前輩指的是靠座標取得曼哈頓距離解決了嗎
本帖最後由 dse12345z 於 2015-8-27 18:27 編輯

其實我不太了解你需要的功能,
因為你原先程式會是做減和增的運算(右下斜滑動), 那實際上你期望它是得到怎樣的結果?
持續增加?持續減少?要先知道你期望的結果才能想怎麼解決吧 @@?
您好,我希望就只判定上下左右四個方向就好,

上跟右是數字遞增,下跟左遞減,

斜的方向不給予判定這樣 ..
本帖最後由 dse12345z 於 2015-8-28 02:42 編輯

回復 5# hungwei0331

我目前想到的是以上一個點為中心,中心線上滑動才能改變值。

作法就需要紀錄上一次移動的點做x、y的判斷,然後移動就判斷是不是在十字線上滑動,是的話就增減數字和換中心點。
可能會遇到一種狀況是,突然斜滑,值不會改變,必須要滑回十字線上才能繼續改變數字增減。(會變成奇怪的行為)
這可以把中心點切換到斜滑點上但不改變值得變化,就不會有這問題了。

不知道是不是你想要的效果?

第一手(手勢開始)為紅色十字為中心


移動點一(手向上)綠變成中心點


移動點二(手往右)藍變成中心點


移動點三(手往右)紫變成中心點
附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
回復 6# dse12345z


    這樣好像還是保持若斜向滑動會增減值比較正常,

    只是斜的方向不知道數值的增減該怎麼定義 : (
本帖最後由 dse12345z 於 2015-8-28 13:02 編輯

回復 7# hungwei0331

我用兩點距離來限制誤差, 用斜率來判斷水平垂直, 最後 x,y 來判斷增減。(距離越大越準但是手勢就要滑很長才會改變值)
你試試看,我有限制斜走不增減值。

附件: 您需要登錄才可以下載或查看附件。沒有帳號?註冊
回復 8# dse12345z

    因為考慮到多個方向會有奇怪的使用者體驗,

    後來我決定只用上下來控制數值的增減,

    目前程式碼改寫成這樣:http://pastebin.com/iPRguhx2

    最後發現有時候左右滑動也會些微影響數值,

    可否請教dez前輩如何限制左右滑動不讓數值增減呢?

    最後非常感謝兩次問問題都有您的熱心回應,非常感謝您。
回復 9# hungwei0331


你看我Demo,判斷垂直方向才做值的改變。
你先試試修改試試看
返回列表