iphone - 如何在呈现弹出窗口之前获取触摸坐标?

标签 iphone ios objective-c uigesturerecognizer

在我的代码中,我需要在呈现弹出窗口之前获取触摸坐标。 这是代码:

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/

相关文章:

ios - 在 Xcode 7.2 中如何在没有苹果开发者程序且没有连接设备的情况下生成 IPA 文件?

ios - NSMutableData 错误

ios - IOS中如何返回到上一个 View ?

ios - GMSAutoCompleteViewController 崩溃 - Swift 3

ios - UITableViewAutomaticDimension 将具有自动布局约束的单元格内容截断到底部

ios - 通用二进制文件是否包含 iPhone 上 App Bundle 中所有沉重的 ipad 图形?怎么办?

ios - 使用应用程序的默认全局队列将图像保存在核心数据中会导致卡住吗?

iphone - 全局整数赋值 - 需要左值作为赋值的左操作数

iphone - 未调用 UIApplicationDelegate 方法

iphone - 在数组中搜索字符串,然后在iphone中的textview中显示