用圆形图像层标记球 - 在iphone中进行触摸变焦或移动

时间:2013-03-16 14:02:45

标签: iphone ios objective-c cocoa-touch opengl-es

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

以下是两张图片。

图片1:

enter image description here

图片2(图层):

enter image description here

最终影像通过调整圆圈:

enter image description here

任何关于此的开始都会很好!!

1 个答案:

答案 0 :(得分:2)

有两种方法可以做到这一点(处理用户触摸):

  1. touchesBegan:withEvent:touchesMoved:withEvent:touchesEnded:withEvent:方法。参考文献如下:UIResponder - Responding to Touch Events

  2. 手势识别器(使用标准手势识别器或创建自己的自定义手势识别器)。参考文献如下:Gesture Recognizers。好的教程是here

  3. 如果你只需要移动红色圆圈,而不是调整它的大小 - 使用touches...方法对你有好处。

    但是如果你想通过使用捏合手势来调整圆的大小 - 你可能想要创建自定义手势识别器(并在那里实现相同的touches...方法)来处理触摸和移动;并使用标准UIPinchGestureRecognizer来处理捏合手势。

    您需要创建自定义手势识别器,因为标准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。< / p>