确定屏幕上的点是否在特定的UIScrollView子视图中

Kyl*_*yle 10 iphone objective-c ipad

UIScrollView包含几个UIView对象; 如何判断屏幕上没有触摸生成的点是否在滚动视图的特定子视图内?到目前为止,尝试确定点是否在子视图中总是返回父滚动视图的子视图数组中的第一个子视图,即坐标是相对于滚动视图而不是窗口.

这是我尝试过的(编辑过的)

-(UIView *)viewVisibleInScrollView 
{ 
    CGPoint point = CGPointMake(512, 384); 
    for (UIView *myView in theScrollView.subviews) 
    { 
        if(CGRectContainsPoint([myView frame], point)) 
        { 
            NSLog(@"In View"); 
            return myView; 
        } 
    } 
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

Kri*_*kel 14

看起来你的点是相对于窗口的,并且你想要它相对于当前视图.convertPoint:fromView:应该有所帮助.

这里可能有错误,但看起来应该是这样的:

-(UIView *)viewVisibleInScrollView 
{ 
    CGPoint point = CGPointMake(512, 384); 
    CGPoint relativePoint = [theScrollView convertPoint:point fromView:nil]; // Using nil converts from the window coordinates.
    for (UIView *myView in theScrollView.subviews) 
    { 
        if(CGRectContainsPoint([myView frame], relativePoint)) 
        { 
            NSLog(@"In View"); 
            return myView; 
        } 
    } 
    return nil;
}
Run Code Online (Sandbox Code Playgroud)

  • -1.`-frame`位于父级的坐标空间中.您应该与`-bounds'进行比较,或者将其转换为滚动视图的坐标空间*一次*并与`-frame`进行比较. (4认同)