Gibt es eine Möglichkeit zu überprüfen , ob ein CGPoint
in einem bestimmten ist CGRect
.
Ein Beispiel wäre: Ich ziehe ein UIImageView
und möchte überprüfen, ob sein Mittelpunkt CGPoint
in einem anderen liegtUIImageView
Gibt es eine Möglichkeit zu überprüfen , ob ein CGPoint
in einem bestimmten ist CGRect
.
Ein Beispiel wäre: Ich ziehe ein UIImageView
und möchte überprüfen, ob sein Mittelpunkt CGPoint
in einem anderen liegtUIImageView
Antworten:
let view = ...
let point = ...
view.bounds.contains(point)
Verwendung CGRectContainsPoint()
:
bool CGRectContainsPoint(CGRect rect, CGPoint point);
Parameter
rect
Das zu untersuchende Rechteck.point
Der zu untersuchende Punkt. Rückgabewert true, wenn das Rechteck nicht null oder leer ist und sich der Punkt innerhalb des Rechtecks befindet. sonst falsch.Ein Punkt wird innerhalb des Rechtecks betrachtet, wenn seine Koordinaten innerhalb des Rechtecks oder an der minimalen X- oder minimalen Y-Kante liegen.
In Swift würde das so aussehen:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = CGRectContainsPoint(someFrame, point)
Swift 3 Version:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = someFrame.contains(point)
Link zur Dokumentation . Bitte denken Sie daran, die Eindämmung zu überprüfen, wenn sich beide im selben Koordinatensystem befinden. Andernfalls sind Konvertierungen erforderlich ( Beispiel ).
UIViews pointInside: withEvent: könnte eine gute Lösung sein. Gibt einen booleschen Wert zurück, der angibt, ob sich der angegebene CGPoint in der von Ihnen verwendeten UIView-Instanz befindet oder nicht. Beispiel:
UIView *aView = [UIView alloc]initWithFrame:CGRectMake(0,0,100,100);
CGPoint aPoint = CGPointMake(5,5);
BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil];
In Ziel c können Sie CGRectContainsPoint (yourview.frame, touchpoint) verwenden.
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch* touch = [touches anyObject];
CGPoint touchpoint = [touch locationInView:self.view];
if( CGRectContainsPoint(yourview.frame, touchpoint) ) {
}else{
}}
In Swift 3 enthält yourview.frame.contains (Berührungspunkt)
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{
}
}
Es ist so einfach, dass Sie die folgende Methode verwenden können, um diese Art von Arbeit zu erledigen: -
-(BOOL)isPoint:(CGPoint)point insideOfRect:(CGRect)rect
{
if ( CGRectContainsPoint(rect,point))
return YES;// inside
else
return NO;// outside
}
In Ihrem Fall können Sie imagView.center als Punkt und einen anderen imagView.frame als rect in about-Methode übergeben.
Sie können diese Methode auch in der folgenden UITouch- Methode verwenden:
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}
Ich fange an zu lernen, wie man mit Swift programmiert und habe auch versucht, dies zu lösen. Das habe ich mir auf Swifts Spielplatz ausgedacht:
// 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")
}
Es wird innen gedruckt
- (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");
}