2012-08-08 184 views
0

刚刚开始iOS编程,试图让UITapGestureRecognizer使用iOS 5.1模拟器工作,并且我似乎无法在点击时获得正确的值。这里是我的代码,我从内森eror的回答nathan erorHow 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提前

+0

当你说“点击触控板”时,你的意思是_click_,还是真的_tap_?模拟器窗口上的点击被视为模拟器内部的轻击。 AFAIK在物理触控板上点击对模拟器没有意义 - 它们不会被传递。 – 2012-08-08 05:49:31

+0

@DavidT如果您的问题被标记为Objective-C,该网站将自动将您的代码突出显示为Objective-C。但是,编辑器预览通常不会实时突出显示。 – 2012-08-08 05:52:58

+0

@ W'rkncacnter gotcha。嗯......我想更像是“点击”触控板。所以它模拟了模拟器上的“tap” – 2012-08-08 06:57:05

回答

0

尝试的NSLog(@ “接触点%@”,NSStringFromCGPoint(位置))

2

我可以重现你的问题。它似乎发生是因为[recognizer.view superview]是窗口(类别UIWindow)。尽管UIWindowUIView的一个子类,但手势识别器似乎并未正确将位置转换为窗口的坐标系。如果我将一个子视图添加到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); 
} 

但是,窗口的坐标系统包括空间的状态栏,并且在旋转设备时不旋转。这可能不是你想要的。

相关问题