2011-11-02 61 views
4

我不知道是否有人知道UIPinchGestureRecognizer刻度值是如何確定的,或者如果有一個公式,我可以用它來計算出一個新的刻度值?如何確定UIPinchGestureRecognizer比例值?

我有一個應用程序,我附上UIPinchGestureRecognizerimageView,並在某些特定情況下,我需要手動調整的比例,如果它縮小了imageView如此這般經過屏幕的某一點。謝謝。

回答

1

我找到了我需要的做一點逆向工程。正如你們大多數人知道誰已經實現與UIPinchGestureRecognizer規模的方法,你最終結束了這行代碼:

GFloat nextScale = 1 - (previousScale - [sender scale]); 

這是nextScale計算由UIPinchGestureRecognizer給出的值,但是我需要讓我自己的自定義比例,因爲用戶已經縮小了我設置的邊界。所以我確定了我需要縮小圖像視圖的寬度,並通過將其設置爲比例來確定我需要的adjustedScale:(nextScale/adjustedScale)=(nextWidth/adjustedWidth)。

然後,我將adjustedScale重新插入上面的公式中,以確定[發件人規模]對於我的新規模金額是多少:[sender scale] = AdjustedScale - 1 - previousScale。

所以,現在我可以使用量設置previousScale值,我需要爲下一次。

+2

由於浮點值的固有數值不準確性,通過逐步應用縮放增量來縮放源可能會導致結果不準確 - 當以這種方式混合時,這對最終用戶而言會變得很明顯。 – Steve

+0

@Steve你會怎麼做?關於你從上面的答案,是否有可能得到兩個接觸點?就像我說的那樣,當它印出來的時候,它是不成比例的。 –

5

給定兩個初始點(觸摸),計算使用勾股定理它們之間的距離。讓這個距離被稱爲"initial distance"

對於點的每個連續更新,重新計算點之間的距離,讓該距離被稱爲"new distance"

scale = "new distance"/"initial distance". 

如果有人實際上並不知道......勾股定理是:

sqrtf(powf(b.x - a.x, 2.0f) + powf(b.y - a.y, 2.0f))

很簡單瞭解縮放公式......如果你的手指兩次相距甚遠他們是當你開始捏時,縮放應該是2.0(2倍) - 所以插入一些數字...最初相距50px ...現在100px = 100/50 = 2

+1

的hypot將庫函數使得它更簡單:hypot將(b.x - a.x,b.y - a.y)。 –

+0

謝謝你寫出來。我認爲這個比例與手指之間的距離並不相稱。我已經測試過了。從1開始放大圖像2,打印出寬度值,但不是雙倍,這是兩倍以上。 –

+0

@CoDEFRo - 呃 - 確實是...。 – Steve