2013-05-01 98 views
0

在我的代碼中,我需要獲取觸摸之前的座標來呈現彈出窗口。 這是代碼:如何在呈現popover之前獲取觸摸座標?

UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
[tapRecognizer setNumberOfTapsRequired:1]; 
[tapRecognizer setDelegate:self]; 
[self.view addGestureRecognizer:tapRecognizer]; 
FreeAndNil(tapRecognizer); 

ratingSliderViewController = [[CMRatingSliderViewController alloc] init]; 
ratingPopoverController = [[UIPopoverController alloc] initWithContentViewController:ratingSliderViewController]; 
[ratingPopoverController setDelegate:self]; 
[ratingPopoverController setPopoverContentSize:CGSizeMake(360.0, 50.0)]; 
[self setPopoverController:ratingPopoverController]; 
[ratingPopoverController presentPopoverFromRect:CGRectMake(latestTouchPoint.x, latestTouchPoint.y, 10.0,10.0) inView:detailView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 

[self.view removeGestureRecognizer:tapRecognizer]; 


... 

} 

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    UITouch *touch = [touches anyObject]; 
    latestTouchPoint = [touch locationInView:self.view]; 
} 

然而酥料餅是touchesBegan調用之前提出。我該如何解決這個問題?我寧願不使用延遲或運行通用的touchesBegan方法中的彈出窗口代碼。

+0

我不明白 - 您只需將手勢添加到視圖中,然後顯示彈出式視圖即可。你爲什麼認爲pop tou會在touchesBegan之前出現? touchesBegan只會在用戶觸摸self.view時調用...... – 2013-05-01 11:51:32

+0

@AviTsadok我已經意識到touchesBegan從來沒有被調用過,但我無法弄清楚我的代碼中有什麼問題 – aneuryzm 2013-05-01 12:06:52

+0

首先,touchesBegan是一個UIView方法,而不是View Controller方法,這就是爲什麼它從來沒有被調用。其次,如果你添加了輕擊手勢,爲什麼你需要覆蓋touchesBegan方法(你在錯誤的地方做過)? – 2013-05-01 12:08:49

回答

2

首先在視圖加載時添加手勢識別器。

@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer; 


- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    _tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; 
    [_tapRecognizer setNumberOfTapsRequired:1]; 
    [self.view addGestureRecognizer:_tapRecognizer]; 
} 

另外,還要確保你目前的自來水識別處理功能,而不是在聲明它裏面的酥料餅(如你現在要做的)!

-(void) tapRecognizer:(UITapGestureRecognizer *)tabRecognizer{ 

    CGPoint touchedPoint = [gestureRecognizer locationInView:self.view]; 
    NSLog(@"Point x %f x %f", aPoint.x, aPoint.y); 

    ratingSliderViewController = [[CMRatingSliderViewController alloc] init]; 
    ratingPopoverController = [[UIPopoverController alloc] initWithContentViewController:ratingSliderViewController]; 
    [ratingPopoverController setDelegate:self]; 
    [ratingPopoverController setPopoverContentSize:CGSizeMake(360.0, 50.0)]; 
    [self setPopoverController:ratingPopoverController]; 
    [ratingPopoverController presentPopoverFromRect:CGRectMake(touchedPoint,  touchedPoint, 10.0,10.0) inView:detailView permittedArrowDirections:UIPopoverArrowDirectionAny animated:YES]; 
} 
0

您可以使用此委託方法添加委託手勢獲得,

- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch