UITapGestureRecognizer不能在模拟器上工作
问题描述:
刚刚开始iOS编程,试图让UITapGestureRecognizer使用iOS 5.1模拟器工作,并且我似乎无法在点击时获得正确的值。这里是我的代码,我从内森eror的回答nathan eror的How to add a touch event to a UIView?UITapGestureRecognizer不能在模拟器上工作
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
CGPoint location = [recognizer locationInView:[recognizer.view superview]];
NSLog(@"touched points: %g, %g", location.x, location.y);
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.
self.view.backgroundColor = [UIColor blackColor];
NSLog(@"gets in here");
UITapGestureRecognizer *singleFingerTap =
[[UITapGestureRecognizer alloc] initWithTarget:self
action:@selector(handleSingleTap:)];
[self.view addGestureRecognizer:singleFingerTap];
}
和我不断收到0.000000我的价值观我每次上在模拟器上我的MacBook Pro触控板挖掘。是因为模拟器吗?或者我会发病吗?
P.S没有人知道如何突出代码作为目标-C在发布这个问题?日Thnx提前
答
尝试的NSLog(@ “接触点%@”,NSStringFromCGPoint(位置))
答
我可以重现你的问题。它似乎发生是因为[recognizer.view superview]
是窗口(类别UIWindow
)。尽管UIWindow
是UIView
的一个子类,但手势识别器似乎并未正确将位置转换为窗口的坐标系。如果我将一个子视图添加到self.view
并将手势识别器放在该子视图上,它会将该点正确转换为self.view
的坐标系。
我建议你在http://bugreport.apple.com提交一个错误报告。 (该产品是“iPhone SDK”)
如果你真的需要得到该点的窗口的坐标系中,你可以这样做:
- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer {
CGPoint location = [recognizer locationInView:recognizer.view];
location = [recognizer.view convertPoint:location toView:recognizer.view.superview];
NSLog(@"touched point: %g, %g", location.x, location.y);
}
但是,窗口的坐标系统包括空间的状态栏,并且在旋转设备时不旋转。这可能不是你想要的。
当你说“点击触控板”时,你的意思是_click_,还是真的_tap_?模拟器窗口上的点击被视为模拟器内部的轻击。 AFAIK在物理触控板上点击对模拟器没有意义 - 它们不会被传递。 – 2012-08-08 05:49:31
@DavidT如果您的问题被标记为Objective-C,该网站将自动将您的代码突出显示为Objective-C。但是,编辑器预览通常不会实时突出显示。 – 2012-08-08 05:52:58
@ W'rkncacnter gotcha。嗯......我想更像是“点击”触控板。所以它模拟了模拟器上的“tap” – 2012-08-08 06:57:05