UIView触摸问题/问题

时间:2011-06-23 18:31:40

标签: iphone ios uiimageview

我的应用有点麻烦。我在问我的方法。

这是一张图片Sample App

基本上我需要色轮在透明盒子里旋转。到目前为止我的工作是什么。我可以拖动色轮,它会旋转。问题是我可以触摸并拖动屏幕上的“任何地方”,它会旋转。我只想让它在'窗口'中旋转。

我基本上添加了一个UIView和一个UIImageView,为ImageView添加了插件,并在touchesBegan和touchesMoved中添加了代码来执行动画。轮子是一个完整的圆形图像,子视图被“剪裁”,不显示图像的下半部分。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *thisTouch = [touches anyObject];
    delta = [thisTouch locationInView:wheelImage];

    float dx = delta.x  - wheelImage.center.x;
    float dy = delta.y  - wheelImage.center.y;
    deltaAngle = atan2(dy,dx); 

    initialTransform = wheelImage.transform;   
  }

  - (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
      UITouch *touch = [touches anyObject];
  CGPoint pt = [touch locationInView:wheelImage];

  float dx = pt.x  - wheelImage.center.x;
  float dy = pt.y  - wheelImage.center.y;
  float ang = atan2(dy,dx);

  //do the rotation
  if (deltaAngle == 0.0) {
    deltaAngle = ang;
    initialTransform = wheelImage.transform;
  }else
  {
    float angleDif = deltaAngle - ang;
    CGAffineTransform newTrans = CGAffineTransformRotate(initialTransform, -angleDif);
    wheelImage.transform = newTrans;

    currentValue = [self goodDegrees:radiansToDegrees(angleDif)];

  }

  }

现在......我的问题如下:

  1. 如何才能使用touchesMoved / Began来处理UIView或UIImageView?
  2. 我应该为此滚轮创建自定义UIView,然后将其添加到我的主视图控制器中吗? 2.A.如果我确实创建了自定义,那么我是否会遇到与触摸相同的问题?

3 个答案:

答案 0 :(得分:2)

简单的解决方案是在您喜欢的区域开始触摸时添加BOOL var设置为true

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
    UITouch *thisTouch = [touches anyObject];
    CGPoint p = [thisTouch locationInView:wheelImage.superview];
    if (CGRectContainsPoint(wheelImage.frame, p))
    {
      rotating = YES;
      // rest of your code
      ...
    }
}

- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
  if (rotating)
  {
     // your code
  }
}

请务必重置rotatingtouchesEnded中的touchesCanceled

答案 1 :(得分:2)

您可能需要考虑使用UISwipeGestureRecognizer并将其添加到您希望识别滑动的视图中。

答案 2 :(得分:1)

如果您将UIImageView子类化并将其放入其中,则只能从该视图中获取触摸,您可能需要将acceptsUserInteraction设置为YES。也改变locationInView:to self;如果从nib加载,请确保将该类设置为该UIImageView的新子类。