2012-08-08 231 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); 
} 

但是,窗口的座標系統包括空間的狀態欄,並且在旋轉設備時不旋轉。這可能不是你想要的。

相關問題