2012-11-22 46 views
0

使用手勢識別器(如平移,捏合和旋轉),是否可以在UIImageView中操作UIImage?使用手勢識別器處理UIImage - 不使用UIImageView

每當我嘗試定義爲UIImage的手勢識別,我得到一個錯誤,說明

無可見的UIImage支持 'addGestureRecognizer:'

有了這個代碼:

UIRotationGestureRecognizer *rotateGesture = [[UIRotationGestureRecognizer alloc] initWithTarget:self action:@selector(rotateImage:)]; 
[imageStrip addGestureRecognizer:rotateGesture]; 

無論如何轉換UIImageView裏面的UIImage而不轉換UIImageView?

+0

實際上,修改圖像數據本身可能是如此複雜的事情...... 爲什麼你不想改變UIImageView?我問這是因爲你有可能從任何UIView產生一個新的UIImage(就像拍快照一樣),也許這對你來說可以。 –

+0

我在我的應用程序中瞄準了一個特殊的編輯效果,最終我使用了一個帶有可變形的UIImageView的UIView。然後我設置'clipsToBounds = YES' –

回答

5

您可以將手勢識別器添加到任何種類的UIView以及您的事件處理方法中,您可以將UIImage重新繪製爲新創建的CGContextRef。這個上下文將不得不用CGContextRotateCTM,CGContextScaleCTM,CGContextTranslateCTM進行轉換,該參數將被調用,參數匹配您從手勢識別器接收到的參數。這是困難的方式。

或者,您可以使用圖像創建一個劃痕UIImageView,使用手勢識別器對其進行轉換,然後將其轉換爲CGContextRef,並將轉換後的圖像從此上下文中移出。

當然可行,但不是微不足道的。

2

UIGestureRecognizer只能附加到UIView - UIImage不是UIView的後代。

這是因爲UIView(或其後代)可以接收觸摸 - UIImage不能。

請參閱Gestures Recognizers Are Attached to a View

用戶完成操作後,您可以根據參數重新計算/重新提取UIImage。關於如何做到這一點:這取決於你想達到的目標。