Iphone UIGestureRecognizers的自定义操作(使用自定义参数)

Iphone UIGestureRecognizers的自定义操作(使用自定义参数),iphone,objective-c,xcode,ipad,ios4,Iphone,Objective C,Xcode,Ipad,Ios4,我的问题的简短版本: 我不知道如何使UITapGestureRecognitzer的“操作”采用其他参数,并实际使用它们 下面是我问题的概要: 我试图让我的iPad应用程序记录(使用NSLog)每当他们按下我的应用程序的一个UITouch按钮时发生的UITouch坐标。触摸的位置需要相对于被触摸的按钮 我所做的: 我已经实现了一个UITapGestureRecognitor,并将其添加到我的每个按钮中。我的问题在于要使用的操作,因为每个按钮都需要动态操作 我目前有以下代码: UITapGest

我的问题的简短版本:

我不知道如何使UITapGestureRecognitzer的“操作”采用其他参数,并实际使用它们

下面是我问题的概要:

我试图让我的iPad应用程序记录(使用NSLog)每当他们按下我的应用程序的一个UITouch按钮时发生的UITouch坐标。触摸的位置需要相对于被触摸的按钮

我所做的:

我已经实现了一个UITapGestureRecognitor,并将其添加到我的每个按钮中。我的问题在于要使用的操作,因为每个按钮都需要动态操作

我目前有以下代码:

 UITapGestureRecognizer *iconClickRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(logIcon:withTag:)];
 [iconClickRecognizer setNumberOfTapsRequired:1];
 [iconClickRecognizer setNumberOfTouchesRequired:1];
 [iconClickRecognizer setDelegate:self];
 [[self.view viewWithTag:1] addGestureRecognizer:iconClickRecognizer];

 [iconClickRecognizer release];
当我知道这是可行的,我将使用for循环将iconClickRecognizer添加到所有按钮的标签中

logIcon:(int)with tag方法如下所示:

-(void)logIcon:(UIGestureRecognizer *)gestureRecognizer withTag:(int)tag {
  NSLog(@"tag X: %f", [gestureRecognizer locationInView:(UIView*)[self.view viewWithTag:tag]].x);
  NSLog(@"tag Y: %f", [gestureRecognizer locationInView:(UIView*)[self.view viewWithTag:tag]].y);
}
什么不起作用:

当我将标签硬编码到logIcon方法中时,它会正确地记录信息。但是,我不知道如何使此方法动态化,并且实际使用“tag”参数

任何帮助都将不胜感激

谢谢,
Alex

问题在于,从目标/动作样式注册中只能获得一个参数,即发送方(在本例中是手势识别器本身)。您无法传递任意上下文。但是,您可以在操作中检查识别器的
视图
属性,并检查该视图的
标记

UIGestureRecognizer类的文档指定该操作必须采用以下形式:

- (void)handleGesture;
- (void)handleGesture:(UIGestureRecognizer *)gestureRecognizer;
不是你的形式:

- (void)logIcon:(UIGestureRecognizer *)gestureRecognizer withTag:(int)tag
因此,您可以询问手势识别器它在整个窗口中的位置,然后与您的按钮进行比较,或者您可以浏览您的按钮并询问它相对于每个按钮的位置


最好是将UIButton子类化,并使每个按钮本身成为目标;然后您就可以确切地知道您所处的视图。

这是处理该视图的最佳方法。标记视图,然后从手势识别器访问视图。回答得好!