2013-07-02 55 views
0

我是一個新手,並重新制作一個應用程序。我正在嘗試使用UITapGestureRecognizer。它在最初的項目文件中工作,但不是新的。唯一的區別是舊的使用導航控制器,但我的不使用導航控制器。UITapGestureRecognizer每個值相同

在新的一箇中,無論您按下屏幕上的哪個位置,自我距離:位置到:中心都停留在640。

任何人都可以幫忙嗎?我不知道爲什麼它不起作用。

- (void)handleSingleTap:(UITapGestureRecognizer *)recognizer { 
    CGPoint location = [recognizer locationInView:[recognizer.view superview]]; 
    CGPoint centre = CGPointMake(512,768/2); 

    NSInteger msg = [self distance:location to:centre]; 
    NSLog(@"location to centre: %d", msg); 

    if ([self distance:location to:centre] < 330) 
+0

'[recognitionizer.view superview]'看起來對我很可疑。這是什麼意見?嘗試用'recognizer.view'代替它 –

+0

修復了它!非常感謝! superview與其他版本的導航控制器有關係嗎? – AnotherNewbie

回答

0

看起來可疑我的部分是[recognizer.view superview]

將手勢識別器添加到不在容器控制器(例如導航控制器)內的UIViewController中的self.view時,該視圖沒有超級視圖。如果您將superview消息發送到self.view而沒有容器視圖控制器,它將返回nil。

所以你的消息基本上看起來像這樣

CGPoint location = [recognizer locationInView:nil]; 

這將在窗口,這也是告訴你,你點擊屏幕的有效CGPoint返回的位置。
由於這不起作用,我想在[self distance:location to:centre]你做了一些只能使用座標相​​對於視圖。也許它與旋轉有關,因爲旋轉設備時窗口的座標不旋轉。 不知道你的代碼我不確定問題是什麼,但它可能並不重要。

只需用recognizer.view替換[recognizer.view superview]即可。