IOS: सत्यापित करें कि कोई बिंदु किसी आयत के अंदर है या नहीं


141

क्या यह सत्यापित करने का कोई तरीका है कि क्या CGPointकोई विशिष्ट के अंदर है CGRect

एक उदाहरण होगा: मैं एक को खींच रहा हूं UIImageViewऔर मैं सत्यापित करना चाहता हूं कि इसका केंद्रीय बिंदु CGPointदूसरे के अंदर है या नहींUIImageView

जवाबों:


303

स्विफ्ट 4

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

उद्देश्य सी

उपयोग करें CGRectContainsPoint():

bool CGRectContainsPoint(CGRect rect, CGPoint point);

पैरामीटर

  • rect जांच करने के लिए आयत।
  • point जांच करने की बात। रिटर्न वैल्यू सही है यदि आयत शून्य या खाली नहीं है और बिंदु आयत के भीतर स्थित है; अन्यथा, असत्य।

एक बिंदु को आयत के अंदर माना जाता है, यदि उसके निर्देशांक आयत के अंदर या न्यूनतम X या न्यूनतम Y किनारे पर स्थित हों।



क्या यह जांचना संभव है कि CGPoint लाइन संदर्भ (CGContext) में है?
अविजित नागरे

6
स्विफ्ट 3.0 में इस तरह का उपयोग करें: एक दृश्य का आयत = फ्रेम, और फिर कनेक्ट करें = rect.contains (बिंदु)
nfinfu

38

स्विफ्ट में इस तरह दिखेगा:

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

स्विफ्ट 3 संस्करण:

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

प्रलेखन के लिए लिंक । कृपया याद रखें कि यदि दोनों एक ही समन्वय प्रणाली में हैं तो जाँच की आवश्यकता है यदि नहीं तो रूपांतरण आवश्यक है ( कुछ उदाहरण )


12

UIView की बात: InEvent: एक अच्छा समाधान हो सकता है। एक बूलियन मान लौटाएगा जो संकेत दे रहा है कि क्या यूजीवीई उदाहरण आप उपयोग कर रहे हैं में दिए गए CGPoint नहीं है। उदाहरण:

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

10

स्विफ्ट में आप इसे इस तरह से कर सकते हैं:

let isPointInFrame = frame.contains(point)

"फ्रेम" एक CGRect है और "बिंदु" एक CGPoint है


5

उद्देश्य 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{

}}

स्विफ्ट 3 में yourview.frame.contains (टचपॉइंट)

 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{

    }

}

3

यह बहुत सरल है, आप इस तरह के काम करने के लिए निम्नलिखित विधि का उपयोग कर सकते हैं: -

-(BOOL)isPoint:(CGPoint)point insideOfRect:(CGRect)rect
{
    if ( CGRectContainsPoint(rect,point))
        return  YES;// inside
    else
        return  NO;// outside
}

आपके मामले में, आप इमेज व्यू.केंटर को बिंदु के रूप में और दूसरे इमेज व्यू.फ्रेम को लगभग विधि के रूप में पास कर सकते हैं ।

आप इस विधि का उपयोग bellow UITouch विधि में भी कर सकते हैं :

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
}

1
- (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");
    }

0

मैं सीखना शुरू कर रहा हूं कि स्विफ्ट के साथ कैसे कोड किया जाए और इसे भी हल करने की कोशिश की जा रही है, यही मैं स्विफ्ट के खेल के मैदान पर आया हूं:

// 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")
}

यह अंदर प्रिंट करता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.