我有两个图像,一个网球和一个红色标记图像。我需要将网球作为背景,并将红色标记作为前景,就像在网球上的图层一样,并且需要根据网球的形状调整红色标记。我必须通过捏和触摸动作来实现这一点。

以下是两个图像。

图片1:

图片2(图层):

最终图像通过调整圆圈:

任何初学者都很好!!

最佳答案

有两种方法(处理用户触摸):

  • touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:方法。参考在这里:UIResponder - Responding to Touch Events
  • 手势识别器(使用标准手势识别器或创建自己的自定义手势识别器)。参考在这里:Gesture Recognizers。好的教程是here

  • 如果您只需要移动红色圆圈,而不需要调整它的大小,那么使用touches...方法将非常适合您。

    但是,如果您想使用捏手势来调整圆的大小,则可能需要创建自定义手势识别器(并在其中实现相同的touches...方法)来处理触摸和移动。并使用standart UIPinchGestureRecognizer处理捏手势。

    您需要创建自定义手势识别器,因为standart UITapGestureRecognizerUIPanGestureRecognizer存在一些问题,就像它提到的here一样。

    UPD:

    例如,您有UIViewController。您正在将UIImageView添加到viewController的view中。并且您正在创建背景清晰的UIView并在其中绘制红色圆圈,或者添加另一个带有红色圆圈的UIImageView(如果有图像的话)。我们称之为redCircleView

    您可以将redCircleView设为透明(redCircleView.alpha = 0),也可以在用户触摸屏幕时对其进行初始化。我认为第二种选择更好,但是我不确定。

    UIViewController中,您正在实现touchesBegan:withEvent:方法,在该方法中,您可以设置redCircleView.alpha = 1或初始化此redCircleView

    touchesMoved:withEvent:实施中,您可以使用UITouch:locationInView:在任何视图中获取触摸位置
     (void) touchesMoved: (NSSet *)touches withEvent:(UIEvent *)event {
          UITouch *touch = [touches anyObject];
          CGPoint point = [touch locationInView:self.view];
          .
          .
          .
     }
    

    然后,您可以更改redCircleView.center(然后红色圆圈的中心将在屏幕上跟随手指),也可以存储上一个点的位置,将其与当前位置进行比较,然后移动redCircleView

    09-25 10:54