Iphone 如何在演示popover之前获取触摸坐标?
在我的代码中,我需要先获得一个触摸的坐标,然后才能显示一个弹出框。 代码如下:Iphone 如何在演示popover之前获取触摸坐标?,iphone,ios,objective-c,uigesturerecognizer,Iphone,Ios,Objective C,Uigesturerecognizer,在我的代码中,我需要先获得一个触摸的坐标,然后才能显示一个弹出框。 代码如下: UITapGestureRecognizer *tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)]; [tapRecognizer setNumberOfTapsRequired:1]; [tapRecognizer setDelegate:self]; [self.view ad
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];
}
但是,popover在
触摸开始之前显示。我怎样才能解决这个问题?我不希望在通用的touchsbegind
方法中使用延迟或运行popover代码。在加载视图时首先添加手势识别器
@property (nonatomic, strong) UITapGestureRecognizer *tapRecognizer;
- (void)viewDidLoad
{
[super viewDidLoad];
_tapRecognizer = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapped:)];
[_tapRecognizer setNumberOfTapsRequired:1];
[self.view addGestureRecognizer:_tapRecognizer];
}
还要确保在tap识别器处理程序函数中呈现popover,而不是在声明它时(就像现在一样)
您可以使用此委托方法将委托添加到手势
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch
我在这里找到了解决方案(需要一些javascript):我不明白-您只需在视图中添加手势,然后显示弹出窗口。你认为为什么在触摸开始前会出现弹出式画面?只有当用户触摸self.view…@AviTsadok时才会调用touchesbeent。我实际上意识到touchesbeent从未被调用,但我无法找出代码中的错误首先,touchesbeent是一个UIView方法,而不是视图控制器方法,这就是为什么它从未被调用。其次,如果您添加了点击手势,为什么需要跳过touchesbeent方法(您在错误的位置执行了该方法)?@AviTsadok OK。我使用ToucheSStart是错误的,因为我在UIViewController中。接触坐标的最佳方式是什么?我现在尝试使用-(void)getCoordinates:(UIGestureRecognitizer*)GestureRecognitizer方法,该方法由UITapGestureRecognitizer触发,但它也从未被调用。您可以只使用[TapRecognitizer locationInView:]方法。请参阅更新的答案。
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldReceiveTouch:(UITouch *)touch