2011-04-13 62 views

回答

7

的UIKit會打電話給你的選擇方法,多次爲單個用戶手勢(捏)。每個電話都代表着規模小的增量(或減少)。如果您處理每個方法的調用,併爲每個小增量相應地縮放圖像,您將獲得平滑的動畫。

您使用識別器的scale屬性來修改圖像。然後,將該屬性重置爲1.0,以便下次調用選擇器方法時,scale屬性僅表示自上一次以來的新增小增量。您再次通過新的小增量重新縮放圖像,並重置爲1.0。如果您不重置識別器的比例尺並使用它重新縮放圖像,則會通過累積更改來縮放圖像,導致跳動行爲(並且縮放比例不正確)。

因此,請確保將手勢識別器的比例重置爲1.要跟蹤比例的總變化,可以爲您的UIImageView或ViewController創建一個實例變量,也可能稱爲「比例」。 (事實上​​,如果您在drawRect中使用了新的縮放比例變量來繪製圖片,則只需在setter中添加對setNeedsDisplay的調用即可,並且在縮放比例更改時不必編寫任何代碼來重新繪製圖片。)

在任何情況下,下面的代碼(包含獵食的限度檢查,但在新的規模變量)應該爲你的選擇方法的工作:

- (void)pinch:(UIPinchGestureRecognizer *)recognizer 
{ 
    if (recognizer.state == UIGestureRecognizerStateChanged || 
     recognizer.state == UIGestureRecognizerStateEnded) { 
     if (imageView.scale < yourScaleLimit) { 
      imageView.scale *= recognizer.scale; 
      //any other code to scale up the image if 
      //just changing imageView.Scale is not enough 
     } 
     recognizer.scale = 1.0; 
    } 
} 

我希望這是有幫助的。

+0

在這裏,imageView不支持.scale屬性。這個錯誤的任何替代方法? – Hemang 2012-10-01 12:45:55

+1

@Hemang:注意上面的第三段。 'imageView.scale'是指您在UIImageView子類中創建的實例變量,用於跟蹤累積的比例變化。或者,您可以在視圖控制器中創建一個實例變量,然後將其稱爲「self.imageViewScale」。無論哪種方式,您都需要一個新變量來跟蹤規模的累積變化。 – 2012-10-03 07:38:19

+0

感謝您的幫助。我錯過了閱讀第3段的那部分內容。所以我犯了一個錯誤。謝謝。代碼工作正常。 – Hemang 2012-10-06 12:21:58

0

在選擇器方法gestureRecognizer檢查scalesenderUIPinchGestureRecognizer)的屬性如果它小於你想要縮放,對圖像應用縮放否則不要。例如,下面的方法是selector然後是pinchGesture

-(void)pinchAction:(UIPinchGestureRecognizer *)sender 
{ 
    if(sender.scale<yourScaleLimit) 
    { 
    //scale up the image 
    } 

} 

感謝,

+0

scale是兩個pinchAction調用之間的相對值,在每次pinchAction調用後設置爲1。所以它不是你的原始視圖尺寸和你當前的視圖尺寸之間的絕對關係 – Seega 2011-04-13 09:49:21