2009-07-10 140 views
11

如何在iPhone上實現捏手勢?我很熟悉在iPhone上使用觸摸事件,但我非常懶惰,不想重新發明輪子,使其與PINCH手勢一樣普遍......源代碼或鏈接將有所幫助。如何在iPhone上捏手勢?

+1

看起來這個樣品在捏縮放http://cocoabugs.blogspot.com/2011/03/pinch-zoom-using-uipinchgesturerecogniz.html – 2011-03-10 02:47:16

回答

8

你需要自己使用一些基本的數學來實現它。

(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event; 
(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event; 

這些是您需要在應用程序中實現的委託方法。

您需要獲取兩次觸摸之間的距離,然後計算您自己代碼中的距離變化。

使用獲得的距離的數學公式被稱爲dot product

我只是想指出,他們在引用的教程中使用的公式不正確。 我已將其更新爲包含教程中未填的絕對值。

這是點積:

- (CGFloat)distanceBetweenTwoPoints:(CGPoint)fromPoint toPoint:(CGPoint)toPoint 
{ 
    float xDist = fromPoint.x - toPoint.x; 
    float yDist = fromPoint.y - toPoint.y; 

    float result = sqrt(pow(xDist,2) + pow(yDist,2)); 
    return result; 
} 

編輯: 我在以前的答案搞錯了....它已經有一段時間,因爲我做了任何一種數學的。

如果你不平方根結果,你不會得到點之間的真正距離。這被稱爲計算兩個向量之間的大小。

這是正確的做法。如果你想省略sqrt,你將不會有兩點之間的確切距離。

如果您不打算答案,您的代碼將工作,但它將使用比實際值大得多的測量值。所以在將來如果你需要得到兩點之間的距離,它將返回類似90000的東西,而不是實際的像素距離,這將是300px。

+0

嗯......不知道你引用的'點積'鏈接多少會派上用場,但至少要感謝回覆...... – RexOnRoids 2009-07-10 04:01:21

+0

沒有它,你無法計算兩次觸摸之間的距離。這是至關重要的。 – 2009-07-10 04:07:35

+0

Thx - 源代碼在這種情況下更容易理解..我沒有準備坐下來試圖吸收整個wiki頁面上覆雜的'點積'LOL – RexOnRoids 2009-07-10 04:10:33

1

如果您正在尋找一個捏合手勢的簡單代碼示例,我使用示例應用程序I describe here(該頁面的倒數第二個和最後一個版本)中Brock描述的方法。在這個例子中,捏手勢用於縮放一些核心動畫層。

他所描述的只是距離計算只是在兩點之間應用畢達哥拉斯定理(將X和Y距離作爲直角三角形的兩個面)。

6

嗯......似乎有些人對如何使用基本數學非常困惑。點積是完全不相關的,只是混淆了這些問題。兩個向量之間的點產品用於計算它們之間的角度。

你實際上需要使用pythagorus定理。點與點之間的距離沒有關係 - 只有pythagorous!

8

很確定這裏提出的解決方案已經過時,有利於在iOS 3.2及更高版本中使用新的UIPinchGestureRecognizer類。