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