我正在使用轻敲手势识别器将一个标签放在另一个UIView中。当用户点击视图时,标签将填充用户点击的组件的标题,子视图位于点按位置的中心。
我需要确保我的手势识别器的初始位置与故事板中定义的子视图的中心匹配(在用户点击视图之前),但似乎我无法找到方法将这一点传递给手势识别器。 有没有办法在视图中的特定点初始化我的点击手势识别器?
答案 0 :(得分:1)
我不太确定你在问什么。手势识别没有“起点”。它们在给定视图内部接收各种触摸类型,并允许您唯一地处理每个触摸类型。
如果你想模拟一下加载的触摸(这类声音可能就是你想要做的那样),重新组织你的代码是这样的:
- (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处触摸时的情况启动子视图的位置/数据。
注意:我省略了配置手势识别器的代码,因为听起来你已经控制了这部分。如果没有,我可以发布更多代码。
答案 1 :(得分:0)
可能会有所帮助的一些事情:
手势识别器可以附加到视图层次结构中的任何视图。因此,如果您想要一些小的子子视图来识别点击,您可以将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
}