IOS:validation一个点是否在一个矩形内

有没有办法来validationCGPoint是否在一个特定的CGRect 。 例如:我拖动一个UIImageView ,我想validation它的中心点CGPoint是否在另一个UIImageView内,我该怎么办?

请参阅文档中的CGRectContainsPoint()

bool CGRectContainsPoint(CGRect rect, CGPoint point);

参数

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

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

在Swift中,看起来像这样:

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

Swift 3版本:

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

链接到文档 。 如果两者都在同一个坐标系中,请记住要检查遏制,否则需要进行转换( 例如 )

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

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

在迅速,你可以这样做:

 let isPointInFrame = frame.contains(point) 

“框架”是CGRect,“点”是CGPoint

在目标c中,您可以使用CGRectContainsPoint(yourview.frame,touchpoint)

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

在swift 3中, yourview.frame.contains(touchpoint)

  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{ } } 

这么简单,你可以用下面的方法做这样的工作:

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

在你的情况下,你可以传递imagView.center作为点和另一个imagView.frame作为rect在方法。

您也可以在波纹pipeUITouch方法中使用此方法:

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