2013-04-10 56 views
0

我需要裁剪圖像以匹配特定尺寸。我從底部開始有三層:在佔位符上使用手勢識別器平移UIImage UIView

  1. 我在UIImage的原始圖像。該圖像來自相機。 (叫cameraImage)
  2. 我有一個UIView藏品這張圖片。當用戶點擊「裁剪」時,UIView的邊界用於裁剪其內部的原始圖像。
  3. 首先,我有一個嚮導圖像,向用戶顯示它們需要的尺寸,以平移,旋轉和捏合其圖像以適應。

我想將平移手勢添加到頂部指南圖像並讓它控制底部的原始圖像。所以指導圖片永遠不會移動,但它正在傾聽平移手勢。 我不知道如何重置識別器,而不會讓我的原始圖像跳回零。也許有人可以幫忙?

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 
CGPoint translation = [recognizer translationInView:recognizer.view]; 
recognizer.view.center = CGPointMake(recognizer.view.center.x+translation.x, recognizer.view.center.y+ translation.y); 
[recognizer setTranslation:CGPointMake(0, 0) inView:recognizer.view]; 
} 

上面的代碼在我的手勢很好的情況下附加到底部圖像。問題是當用戶超出視圖邊界時,圖像停止平移並基本卡住。你再也碰不到了,所以它就坐在那裏。所以我想如果我將手勢附加到頂部,它會解決這個問題。

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 
CGPoint translation = [recognizer translationInView:recognizer.view]; 
cameraImage.center = CGPointMake(recognizer.view.center.x+translation.x, recognizer.view.center.y+ translation.y); 
} 

這幾乎奏效。我設置了cameraImage的中心,並刪除了重設識別器的第三行。如果我沒有移除它,每次嘗試和平移時,cameraImage都會跳回到相同的位置。它幾乎可以工作,因爲當您再次單擊圖像時,它不會從您觸摸的像素開始。它將圖像移回到原始位置,然後讓您平移。

回答

2

第一種選擇: 當識別進入UIGestureRecognizerStateEnded狀態

if(recofnizer.state == UIGestureRecognizerStateEnded) 
{ 
... 
} 

您及時保存在這一點上,翻譯在你的類的實例varibale(@屬性)。

然後你總是將保存的翻譯添加到新的翻譯。 在這個代碼應該是這樣的:

- (IBAction)handlePan:(UIPanGestureRecognizer *)recognizer { 
     CGPoint translation = [recognizer translationInView:recognizer.view]; 
     CGPoint updatedTranslation = CGPointMake(translation.x+self.savedTranslation.x,translation.y+self.savedTranslation.y); 
     cameraImage.center = CGPointMake(recognizer.view.center.x+updatedTranslation.x, recognizer.view.center.y+ updatedTranslation.y); 
     if(recofnizer.state == UIGestureRecognizerStateEnded) 
     { 
      self.savedTranslation = updatedTranslation; 
     } 
} 

不要忘記添加@property (nonatomic, assign) CGPoint savedTranslation;到你的界面。 還要確保savedTranslation變量在類的init方法初始化self.savedTranslation = CGPointMake(0,0);

第二個選項: 你應該考慮一下做所有你與ImageView的作爲滾動視圖的viewForZooming的滾動視圖想要什麼。這允許非常流暢的交互,就像用戶習慣的一樣!

在此滾動視圖之上,您可以放置​​您的蒙版/指南,但一定要禁用蒙版/指南視圖的userInteraction,以使您的用戶觸摸下面的滾動視圖!

+0

謝謝!我必須對代碼進行一次更改才能使其工作。我將'self.savedTranslation = translation;'改爲'self.savedTranslation = updatedTranslation;'我沒有想過使用UIScrollView來做這件事。這聽起來比我目前正在做的更有希望,謝謝! – 2013-04-10 21:30:26

+0

哦,真好!我更新了我的答案! – 2013-04-10 21:58:18

相關問題