我正在使用点击手势识别器在另一个 UIView 中放置一个带有标签的小子视图。当用户点击视图时,标签会填充用户点击的组件的标题,并且子视图以点击位置为中心。
我需要确保我的手势识别器的初始位置与情节提要中定义的子视图的中心相匹配(在用户点击视图之前),但似乎我无法找到通过这一点的方法转到手势识别器。 有没有办法用视图中的某个点初始化我的点击手势识别器?
我正在使用点击手势识别器在另一个 UIView 中放置一个带有标签的小子视图。当用户点击视图时,标签会填充用户点击的组件的标题,并且子视图以点击位置为中心。
我需要确保我的手势识别器的初始位置与情节提要中定义的子视图的中心相匹配(在用户点击视图之前),但似乎我无法找到通过这一点的方法转到手势识别器。 有没有办法用视图中的某个点初始化我的点击手势识别器?
我不太确定你在问什么。手势识别没有“起点”。它们接收给定视图内的各种触摸类型,并允许您唯一地处理每一个。
如果您想模拟加载时的触摸(听起来可能是您想要做的),请将您的代码重新组织为如下所示:
- (void)viewDidLoad
{
//simulate touch here
[self touchedAtLocation:CGPointMake(100, 100)];
}
//Your delegate method
- (void)handleTap:(UITapGestureRecogizer *)recognizer
{
[self touchedAtLocation:[recognizer locationInView:self.view]];
}
- (void)touchedAtLocation:(CGPoint)location
{
//perform action based on location of touch
}
在此示例中,您可以根据触摸 100,100 时的位置/数据来启动子视图的位置/数据。
注意:我省略了配置您的手势识别器的代码,因为听起来您已经控制了该部分。如果没有,我可以发布更多代码。
几件事可能会有所帮助:
手势识别器可以附加到视图层次结构中的任何视图。因此,如果您想要一些小的子子视图来识别点击,您可以将GestureRecognizer 添加到该视图。
当手势被识别时,您可以在决定对其执行任何操作之前测试手势的位置(以及其状态的其他方面)。例如,假设您只希望手势在用户点击视图内非常小的空间时起作用......
- (void)handleTap:(UITapGestureRecogizer *)recognizer {
// get the location relative to the subview to which this recognizer is attached
CGPoint location = [recognizer locationInView:recognizer.view];
// tiny rect to test, also in the recognizer's view's coordinates
CGRect someSmallerRect = CGRectInset(recognizer.view.bounds, 10, 10);
if (CGRectContainsPoint(someSmallerRect, location)) {
// do whatever the touch should do
}
// otherwise, it's like it never happened
}