【问题标题】:Manipulating UIImage with GestureRecognizers - NOT UIImageView使用 GestureRecognizers 操作 UIImage - 不是 UIImageView
【发布时间】:2012-11-22 19:29:04
【问题描述】:

使用诸如平移、捏合和旋转等手势识别器,是否可以在 UIImageView 中操作 UIImage?

每当我尝试为 UIImage 定义手势识别器时,都会收到一条错误提示

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

使用此代码:

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

有没有在不转换 UIImageView 的情况下转换 UIImageView 内的 UIImage?

【问题讨论】:

  • 其实修改图片数据本身就是一件很复杂的事情……为什么你不想改造UIImageView呢?我问它是因为您有可能从任何 UIView 生成一个新的 UIImage(类似于拍摄快照),并且可能对您来说没问题。
  • 我的目标是在我的应用程序中实现特殊的编辑效果,最终我使用了一个 UIView,其中包含可转换的 UIImageView。然后我设置clipsToBounds = YES

标签: objective-c ios uiimageview uiimage


【解决方案1】:

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

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

当然可行,但并非微不足道。

【讨论】:

    【解决方案2】:

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

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

    请参阅Gestures Recognizers Are Attached to a View

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多