Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/42.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何在演示popover之前获取触摸坐标?_Iphone_Ios_Objective C_Uigesturerecognizer - Fatal编程技术网

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