【问题标题】:How can I have my UIGestureRecognizer attached to my view and apply its effects on another item如何将 UIGestureRecognizer 附加到我的视图并将其效果应用于另一个项目
【发布时间】:2014-03-19 19:35:30
【问题描述】:

我的问题是,当缩放 UIimages 时,图像最终会变得太小触摸、旋转和调整大小。

我的想法是将识别器附加到背景视图,并让它将正在执行的操作传递给它上面的视图。

假设我有 View A 作为背景。

视图 B、C 和 D 位于顶部。

目前,B、C 和 D 具有处理捏合、平移和旋转的识别器。

我希望将该识别器附加到视图 A。

如果 B 有焦点,则在显示屏上捏合会将手势发送到 A,然后 A 将其应用于 B,依此类推。

- (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {
//    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    UIView *tmp = [imagesToRender lastObject];
    tmp.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
    recognizer.scale = 1;

}

上面注释掉的行是我调整所有图像大小的方式。但是,由于识别器现在已附加到视图 A。我必须获取要调整大小的项目。我用 UIView 表示。

调整大小有效。但是,它会撤消其他转换。说,我在调整项目大小之前旋转了项目。

【问题讨论】:

    标签: ios objective-c cocoa-touch


    【解决方案1】:

    尝试在所有其他视图之上添加一个透明 (alpha = 0) 视图-E。将你的gestureReconizer附加到这个View-E(这可能是因为它在顶部),然后根据你的逻辑发送给其他人......

    【讨论】:

    • 如果你评论// recognizer.scale = 1;这一行会怎么样
    • 如果您不知道每次重新开始捏合时要重置的比例,而不是像之前评论中建议的那样评论该行,只需像这样调整您的变换:`tmp.transform = CGAffineTransformScale(tmp.transform,recognizer.scale,recognizer.scale);。现在您的转换基于所选视图的先前转换,而不是基于背景视图。跳这个解决你的问题。
    【解决方案2】:
    - (IBAction)handlePinch:(UIPinchGestureRecognizer *)recognizer {
    //    recognizer.view.transform = CGAffineTransformScale(recognizer.view.transform, recognizer.scale, recognizer.scale);
        UIView *tmp = selectedItem;
        tmp.transform = CGAffineTransformScale(tmp.transform, recognizer.scale, recognizer.scale);
        recognizer.scale = 1;
    
    }
    

    我能够通过更改 CGAffineTransformScale 并使用 tmp 图像来保持过去的比例来实现这一点

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多