我对IOS开发很陌生。首先让我解释一下我的问题。
在Adobe Flash中,有一个鼠标事件,使我能够检测到鼠标进入动画片段。
例如,假设我有一个主容器影片剪辑,并且在其中有很多对象。如果我将鼠标拖到这些对象上,它们将(例如)更改其颜色。
在IOS中,我有一个用作容器的主视图,并且在其中填充了一些颜色设置为-blue-的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]];
}
但是问题在于,只有第一个的颜色会改变。
当然,这可能会出现性能问题:尽管仅一次捕获和颜色更改就足够了;当我的手指在正方形内时,会多次调用该处理程序/动作。
那么,有什么建议如何解决这类问题?
提前致谢。
最佳答案
问题在于,只有第一个子视图中的手势识别器会做出反应,因此手势中不在其区域中的触摸没有任何效果。您可以尝试以下方法:
-(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
}
}
}
}