160 votes

IOS: vérifier si un point se trouve à l'intérieur d'un rectangle

Y a-t-il un moyen de vérifier si un CGPoint se trouve à l'intérieur d'un CGRect spécifique ?

Un exemple serait : Je fais glisser un UIImageView et je veux vérifier si son point central CGPoint se trouve à l'intérieur d'un autre UIImageView.

337voto

Ole Begemann Points 85798

Swift 4

let view = ...
let point = ...
view.bounds.contains(point)

Objective-C

Utilisez CGRectContainsPoint():

bool CGRectContainsPoint(CGRect rect, CGPoint point);

Paramètres

  • rect Le rectangle à examiner.
  • point Le point à examiner. Valeur de retour true si le rectangle n'est pas nul ou vide et que le point se trouve à l'intérieur du rectangle; sinon, false.

Un point est considéré à l'intérieur du rectangle si ses coordonnées se trouvent à l'intérieur du rectangle ou sur le bord minimum X ou minimum Y.

13 votes

0 votes

Est-il possible de vérifier si CGPoint se trouve dans le contexte de ligne (CGContext) ?

7 votes

En Swift 3.0, utilisez comme ceci : rect = cadre d'une vue, puis isContain = rect.contains(point)

45voto

Julian Król Points 1596

En Swift, cela ressemblerait à ceci :

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

Version Swift 3 :

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

Lien vers la documentation. Veuillez vous assurer de vérifier si les deux sont dans le même système de coordonnées, sinon des conversions sont nécessaires (voir un exemple)

15voto

Gerardo Medina Points 279

En Swift, vous pouvez le faire comme ceci :

let isPointInFrame = frame.contains(point)

"frame" est un CGRect et "point" est un CGPoint

12voto

Stavash Points 7925

PointInside:withEvent: de UIView pourrait être une bonne solution. Renvoie une valeur booléenne indiquant si le CGPoint donné est dans l'instance UIView que vous utilisez. Exemple :

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

5voto

Tanvir Singh Points 101

En Objective C, vous pouvez utiliser CGRectContainsPoint(yourview.frame, touchpoint)

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

}else{

}}

En Swift 3, yourview.frame.contains(touchpoint)

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

    }else{

    }

}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X