Есть ли способ проверить, находится ли a CGPoint
внутри определенного CGRect
.
Пример: я перетаскиваю UIImageView
и хочу проверить, находится ли его центральная точка CGPoint
внутри другогоUIImageView
let view = ...
let point = ...
view.bounds.contains(point)
Использование CGRectContainsPoint()
:
bool CGRectContainsPoint(CGRect rect, CGPoint point);
Параметры
rect
Прямоугольник для исследования.point
Пункт для изучения. Возвращаемое значение истина, если прямоугольник не является пустым или пустым и точка находится внутри прямоугольника; в противном случае - ложь.Точка считается внутри прямоугольника, если ее координаты лежат внутри прямоугольника или на минимальном 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: может быть хорошим решением. Вернет логическое значение, указывающее, находится ли данная 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)
"frame" - это CGRect, а "point" - это 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 в методе about.
Вы также можете использовать этот метод в приведенном ниже методе UITouch :
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event { }
источник
- (void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{ UITouch *touch = [[event allTouches] anyObject]; CGPoint touchLocation = [touch locationInView:self.view]; CGRect rect1 = CGRectMake(vwTable.frame.origin.x, vwTable.frame.origin.y, vwTable.frame.size.width, vwTable.frame.size.height); if (CGRectContainsPoint(rect1,touchLocation)) NSLog(@"Inside"); else NSLog(@"Outside"); }
источник
Я начинаю учиться программировать на Swift и тоже пытался решить эту проблему, вот что я придумал на игровой площадке Swift:
// Code var x = 1 var y = 2 var lowX = 1 var lowY = 1 var highX = 3 var highY = 3 if (x, y) >= (lowX, lowY) && (x, y) <= (highX, highY ) { print("inside") } else { print("not inside") }
Он печатает внутри
источник