2011-11-07 39 views
115

有没有办法来验证CGPoint是否在特定的CGRect内。 例如:我拖着一个UIImageView,我想验证它的中心点CGPoint是否在另一个UIImageView我该怎么办?IOS:验证点是否在矩形内

回答

239

请参阅文档中的CGRectContainsPoint()

bool CGRectContainsPoint(CGRect rect, CGPoint point);

参数

  • rect检查的矩形。
  • point要检查的一点。 返回值 如果矩形不为空或空且点位于矩形内,则为true;否则,是错误的。

如果一个点的坐标位于矩形的内部或最小的X或最小的Y边上,则该点被认为是在矩形内。

+13

缺少的环节;)https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html – ezekielDFM

+0

救我的时间。谢谢 – HamasN

+0

非常感谢... –

10

UIView的pointInside:withEvent:可能是一个很好的解决方案。 将返回一个布尔值,指示给定的CGPoint是否在您正在使用的UIView实例中。 例子:

UIView *aView = [UIView alloc]initWithFrame:CGRectMake(0,0,100,100); 
CGPoint aPoint = CGPointMake(5,5); 
BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil]; 
3

它是如此简单,你可以用下面的方法做这样的工作: -

-(BOOL)isPoint:(CGPoint)point insideOfRect:(CGRect)rect 
{ 
    if (CGRectContainsPoint(rect,point)) 
     return YES;// inside 
    else 
     return NO;// outside 
} 

在你的情况,你可以通过imagView.center为点另一个imagView.frame作为rect in about方法。

您也可以在波纹管UITouch使用此方法方法:

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
} 
31

在斯威夫特将是这样的:

let point = CGPointMake(20,20) 
let someFrame = CGRectMake(10,10,100,100) 
let isPointInFrame = CGRectContainsPoint(someFrame, point) 

斯威夫特3版本:

let point = CGPointMake(20,20) 
let someFrame = CGRectMake(10,10,100,100) 
let isPointInFrame = someFrame.contains(point) 

Link to documentation。请记住检查遏制,如果两者是相同的坐标系中,如果没有,那么转换需要(some example

+0

非常感谢 –

7

在迅速的,你可以做这样的:

let isPointInFrame = frame.contains(point) 

“帧”是的CGRect和“点”是一个CGPoint

5

在Objective C中,你可以使用CGRectContainsPoint(yourview.frame,接触点)

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ 
UITouch* touch = [touches anyObject]; 
CGPoint touchpoint = [touch locationInView:self.view]; 
if(CGRectContainsPoint(yourview.frame, touchpoint)) { 

}else{ 

}} 

快速3 yourview.frame。包含(接触点)

override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) { 
    let touch:UITouch = touches.first! 
    let touchpoint:CGPoint = touch.location(in: self.view) 
    if wheel.frame.contains(touchpoint) { 

    }else{ 

    } 

}