如何同时获取2个视图中的水龙头坐标

时间:2014-07-16 20:04:28

标签: ios objective-c uiimageview cgpoint

我正在开发iOS地图应用,它包含交互式地图。交互式地图是UIImageView的子类,放在scrollView上。我的视图层次结构如下所示:
View hierarchy
当用户点击地图的某些部分时,ViewController会执行动画segue(比如放大到地图的那个区域)。我可以从屏幕的任何一点开始segue,但为了正确地做到这一点,我需要用户相对于屏幕本身的精确坐标。由于ImageView位于ScrollView的顶部,因此它使用不同的坐标系,大于屏幕大小。无论如何,地图的哪个区域已被挖掘,重要的是屏幕上的点击CGPoint(物理)。

ImageView使用自己的代码来获取点击的坐标:

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [super touchesEnded:touches withEvent:event];

    // cancel previous touch ended event
    [NSObject cancelPreviousPerformRequestsWithTarget:self];

    CGPoint touchPoint  = \
        [[touches anyObject] locationInView:self];

    NSValue*    touchValue =\
        [NSValue
         valueWithCGPoint:touchPoint];

    // perform new one
    [self
     performSelector:@selector(_performHitTestOnArea:)
     withObject:touchValue
     afterDelay:0.1];
}

如果我放置手势识别器,它可以工作,但ImageView无法进行任何触摸,因此调用segue。

手势识别器的代码,我试图使用:

UITapGestureRecognizer *rec = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapRecognized:)];
[someView addGestureRecognizer:rec];
[rec release];

// elsewhere
- (void)tapRecognized:(UITapGestureRecognizer *)recognizer
{
    if(recognizer.state == UIGestureRecognizerStateRecognized)
    {
        CGPoint point = [recognizer locationInView:recognizer.view];
        // again, point.x and point.y have the coordinates
    }
}  

那么,有没有办法在不同的参考系统中获得两个坐标?或者使这些识别器同时工作而不会相互干扰?

解决
我使用此代码将触摸点从一个视图的参考系统转换为

CGPoint pointInViewCoords = [self.parentView convertPoint:self.imageView.touchPoint fromView:self.imageView];

其中self.parentView是层次结构图像上的“视图” - 具有屏幕大小。

0 个答案:

没有答案