在我的代码中,我需要在呈现弹出窗口之前获取触摸坐标。 这是代码:
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
方法中运行弹出代码。
最佳答案
首先在 View 加载时添加手势识别器。
@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];
}
关于iphone - 如何在呈现弹出窗口之前获取触摸坐标?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16317552/