2011-11-07 26 views
115

के अंदर है या नहीं, यह सत्यापित करने का कोई तरीका है कि CGPoint एक विशिष्ट CGRect के अंदर है या नहीं। उदाहरण के लिए: मैं UIImageView खींच रहा हूं और मैं यह सत्यापित करना चाहता हूं कि इसका केंद्रीय बिंदु CGPoint अन्य UIImageView के अंदर है, तो मैं कैसे कर सकता हूं?आईओएस: सत्यापित करें कि कोई बिंदु

उत्तर

239

प्रलेखन में CGRectContainsPoint() देखें।

bool CGRectContainsPoint(CGRect rect, CGPoint point);

पैरामीटर

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

आयत के अंदर एक बिंदु माना जाता है यदि इसके निर्देशांक आयत के अंदर या न्यूनतम एक्स या न्यूनतम वाई किनारे पर हैं।

+13

लापता लिंक;) https://developer.apple.com/library/mac/#documentation/graphicsimaging/reference/CGGeometry/Reference/reference.html – ezekielDFM

+0

मुझे समय की बचत। धन्यवाद – HamasN

+0

धन्यवाद एक टन ... –

10

UIView का बिंदु इनसाइड: साथ: एक अच्छा समाधान हो सकता है। एक बुलियन मान वापस गीला संकेत देगा या नहीं दिया गया दिया गया CGPoint UIView उदाहरण में है जिसका आप उपयोग कर रहे हैं। उदाहरण:

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

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

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

आपके मामले में, आप imagView.center बिंदु के रूप में पारित कर सकते हैं और एक और imagView.frame विधि के बारे में संदर्भ के रूप में।

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

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

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

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) 

Link to documentation। रोकथाम की जाँच करने के लिए कृपया याद रखें अगर दोनों एक ही समन्वय प्रणाली में हैं नहीं तो फिर रूपांतरण के लिए आवश्यक हैं (some example)

+0

धन्यवाद बहुत स्पष्ट –

7

तेजी में आप इसे इस तरह कर सकते हैं:

let isPointInFrame = frame.contains(point) 

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

5

उद्देश्य सी में आप उपयोग कर सकते हैं CGRectContainsPoint (yourview.frame, संपर्क सूत्र)

-(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 में।शामिल (संपर्क सूत्र)

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{ 

    } 

}