使用GestureRecognizers操作UIImage - 不是UIImageView

时间:2012-11-22 19:29:05

标签: objective-c ios uiimageview uiimage

使用Pan,Pinch和Rotate之类的手势识别器,是否可以在UIImageView中操作UIImage?

每当我尝试为UIImage定义手势识别器时,我都会收到错误说明

  

没有可见的UIImage支持'addGestureRecognizer:'

使用此代码:

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

无论如何在不转换UIImageView的情况下转换UIImageView内的UIImage?

2 个答案:

答案 0 :(得分:5)

您可以为任何类型的UIView添加手势识别器,并且在您的事件处理方法中,您可以将UIImage重新绘制到新创建的CGContextRef。此上下文必须使用CGContextRotateCTMCGContextScaleCTMCGContextTranslateCTM进行转换,并使用与从手势识别器接收的参数匹配的参数进行调用。这是艰难的方式。

或者,您可以使用图像创建一个临时UIImageView,然后使用手势识别器对其进行转换,然后将其渲染为CGContextRef,并将转换后的图像从此上下文中移除。

当然可行,但并非无足轻重。

答案 1 :(得分:2)

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

这是因为UIView(或它的后代)可以接收触摸 - UIImage不能。

请参阅Gestures Recognizers Are Attached to a View

用户完成操作后,您可以根据参数重新计算/重新呈现UIImage。关于如何做到这一点:这实际上取决于你想要达到的目标。