簡體   English   中英

在占位符UIView上使用手勢識別器平移UIImage

[英]Panning a UIImage with a Gesture Recognizer on a placeholder 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會跳回到相同的位置。 它幾乎可以工作,因為當您再次單擊圖像時,它不會從您觸摸的像素開始。 它將圖像移回原始位置,然后讓您平移。

第一個選項:當識別器進入UIGestureRecognizerStateEnded狀態時

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

您可以在該類的實例varibale(@property)中存儲該時間點的轉換。

然后,您始終將保存的翻譯添加到新翻譯中。 在代碼中,這將是這樣的:

 - (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的scrollview中做你想要的所有內容作為scrollview的viewForZooming。 這樣可以讓用戶習慣非常流暢的互動!

在此滾動視圖上方,您可以放置​​遮罩/指南,但請務必禁用遮罩/指南視圖的userInteraction,以使用戶觸摸下方的滾動視圖!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM