Iphone UIGestureRecognizers的自定义操作(使用自定义参数)
我的问题的简短版本: 我不知道如何使UITapGestureRecognitzer的“操作”采用其他参数,并实际使用它们 下面是我问题的概要: 我试图让我的iPad应用程序记录(使用NSLog)每当他们按下我的应用程序的一个UITouch按钮时发生的UITouch坐标。触摸的位置需要相对于被触摸的按钮 我所做的: 我已经实现了一个UITapGestureRecognitor,并将其添加到我的每个按钮中。我的问题在于要使用的操作,因为每个按钮都需要动态操作 我目前有以下代码:Iphone UIGestureRecognizers的自定义操作(使用自定义参数),iphone,objective-c,xcode,ipad,ios4,Iphone,Objective C,Xcode,Ipad,Ios4,我的问题的简短版本: 我不知道如何使UITapGestureRecognitzer的“操作”采用其他参数,并实际使用它们 下面是我问题的概要: 我试图让我的iPad应用程序记录(使用NSLog)每当他们按下我的应用程序的一个UITouch按钮时发生的UITouch坐标。触摸的位置需要相对于被触摸的按钮 我所做的: 我已经实现了一个UITapGestureRecognitor,并将其添加到我的每个按钮中。我的问题在于要使用的操作,因为每个按钮都需要动态操作 我目前有以下代码: UITapGest
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子类化,并使每个按钮本身成为目标;然后您就可以确切地知道您所处的视图。这是处理该视图的最佳方法。标记视图,然后从手势识别器访问视图。回答得好!