类似鼠标的iphone手势/事件进入闪光灯

时间:2012-07-18 20:44:21

标签: iphone ios flash gesture-recognition uipangesturerecognizer

我对IOS开发很新。让我先解释一下我的问题。

在Adobe Flash中,有一个鼠标事件可以让我检测鼠标进入动画片段。 所以例如假设我有一个主容器影片剪辑,在里面我有一堆对象。如果我将鼠标拖到这些对象上,它们将 - 例如 - 改变它们的颜色。

在IOS中,我有一个主视图用作容器,在里面我填充了几个UIViews,颜色设置为某种颜色 - 蓝色 - 。我想要实现的是,当我点击并开始移动我的手指时,我希望手指下的那些改变它们的颜色。 我正在使用以下代码:

for (int i=0;i<8;i++)
{
    for(int j=0; j<8; j++)
    {
      UIPanGestureRecognizer * gesture = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(panGestureCaptured:)];
      UIView * test = [[UIView alloc] initWithFrame:CGRectMake(i*34, j*34, 32, 32)];
      [test setBackgroundColor:[UIColor blueColor]];
      [self.view addSubview:test];
      [test addGestureRecognizer:gesture];
    }
}

对于处理程序:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender
{
    [sender.view setBackgroundColor:[UIColor redColor]];
}

但问题在于,只改变了第一个颜色。 当然,这可能存在性能问题:虽然只有一次捕获和颜色变化就足够了;当我的手指在正方形内时,多次调用处理程序/动作。

那么,有什么建议如何处理这类问题?

提前致谢。

1 个答案:

答案 0 :(得分:1)

问题是只有第一个子视图中的手势识别器正在作出反应,因此手势中不在其区域内的触摸无效。你可以试试这个:

-(void) panGestureCaptured:(UIPanGestureRecognizer*)sender
{
    for(NSUInteger i=0;i<[sender numberOfTouches];i++)
    {
        CGPoint touchPt = [sender locationOfTouch:i inView:self.view];
        for(UIView *subV in [self.view subviews])
        {   
            if(CGRectContainsPoint(c.frame, touchPt))
            {   
                subV.backgroundColor = [UIColor whiteColor]; //or whatever
                break; //assumes no overlapping
            }
        }
    }
}