A'nın CGPoint
belirli bir içinde olup olmadığını doğrulamanın bir yolu var mı CGRect
?
Bir örnek: Bir sürükleme UIImageView
ve merkezi noktasının CGPoint
başka bir içinde olup olmadığını doğrulamak istiyorumUIImageView
A'nın CGPoint
belirli bir içinde olup olmadığını doğrulamanın bir yolu var mı CGRect
?
Bir örnek: Bir sürükleme UIImageView
ve merkezi noktasının CGPoint
başka bir içinde olup olmadığını doğrulamak istiyorumUIImageView
Yanıtlar:
let view = ...
let point = ...
view.bounds.contains(point)
Kullanım CGRectContainsPoint()
:
bool CGRectContainsPoint(CGRect rect, CGPoint point);
Parametreler
rect
İncelenecek dikdörtgen.point
İncelenecek nokta. Dikdörtgen null veya boş değilse ve nokta dikdörtgenin içinde bulunuyorsa true Değeri; aksi takdirde yanlış.Koordinatları dikdörtgenin içinde veya minimum X veya minimum Y kenarındaysa, dikdörtgenin içinde bir nokta dikkate alınır.
Swift'te bu şöyle görünecektir:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = CGRectContainsPoint(someFrame, point)
Swift 3 sürümü:
let point = CGPointMake(20,20)
let someFrame = CGRectMake(10,10,100,100)
let isPointInFrame = someFrame.contains(point)
Belgelere bağlantı . Lütfen her ikisinin de aynı koordinat sisteminde olup olmadığını kontrol etmeyi unutmayın, bu durumda dönüşümler gerekmez ( bazı örnek )
UIView'in noktasıInside: withEvent: iyi bir çözüm olabilir. Belirtilen CGPoint'in kullandığınız UIView örneğinde olup olmadığını gösteren bir boole değeri döndürür. Misal:
UIView *aView = [UIView alloc]initWithFrame:CGRectMake(0,0,100,100);
CGPoint aPoint = CGPointMake(5,5);
BOOL isPointInsideView = [aView pointInside:aPoint withEvent:nil];
Hedef c'de CGRectContainsPoint'i (görünüm çerçeveniz, temas noktası) kullanabilirsiniz
-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event{
UITouch* touch = [touches anyObject];
CGPoint touchpoint = [touch locationInView:self.view];
if( CGRectContainsPoint(yourview.frame, touchpoint) ) {
}else{
}}
Hızlı 3'te yourview.frame.contains (temas noktası)
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{
}
}
Çok basit, bu tür işleri yapmak için aşağıdaki yöntemi kullanabilirsiniz: -
-(BOOL)isPoint:(CGPoint)point insideOfRect:(CGRect)rect
{
if ( CGRectContainsPoint(rect,point))
return YES;// inside
else
return NO;// outside
}
Sizin durumunuzda imagView.center'ı nokta ve başka bir imagView.frame olarak geçirebilirsiniz rect olarak about yöntemiyle .
Bu yöntemi aşağıdaki UITouch Yöntemi'nde de kullanabilirsiniz :
-(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 ile nasıl kod yazacağımı öğrenmeye başladım ve bunu da çözmeye çalışıyordum, Swift'in oyun alanında bulduğum şey:
// 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")
}
İçine yazdırır