क्या यह सत्यापित करने का कोई तरीका है कि क्या CGPoint
कोई विशिष्ट के अंदर है CGRect
।
एक उदाहरण होगा: मैं एक को खींच रहा हूं UIImageView
और मैं सत्यापित करना चाहता हूं कि इसका केंद्रीय बिंदु CGPoint
दूसरे के अंदर है या नहींUIImageView
क्या यह सत्यापित करने का कोई तरीका है कि क्या CGPoint
कोई विशिष्ट के अंदर है CGRect
।
एक उदाहरण होगा: मैं एक को खींच रहा हूं UIImageView
और मैं सत्यापित करना चाहता हूं कि इसका केंद्रीय बिंदु CGPoint
दूसरे के अंदर है या नहींUIImageView
जवाबों:
let view = ...
let point = ...
view.bounds.contains(point)
उपयोग करें CGRectContainsPoint()
:
bool CGRectContainsPoint(CGRect rect, CGPoint point);
पैरामीटर
rect
जांच करने के लिए आयत।point
जांच करने की बात। रिटर्न वैल्यू सही है यदि आयत शून्य या खाली नहीं है और बिंदु आयत के भीतर स्थित है; अन्यथा, असत्य।एक बिंदु को आयत के अंदर माना जाता है, यदि उसके निर्देशांक आयत के अंदर या न्यूनतम X या न्यूनतम Y किनारे पर स्थित हों।
स्विफ्ट में इस तरह दिखेगा:
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)
प्रलेखन के लिए लिंक । कृपया याद रखें कि यदि दोनों एक ही समन्वय प्रणाली में हैं तो जाँच की आवश्यकता है यदि नहीं तो रूपांतरण आवश्यक है ( कुछ उदाहरण )
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];
उद्देश्य 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{
}
}
यह बहुत सरल है, आप इस तरह के काम करने के लिए निम्नलिखित विधि का उपयोग कर सकते हैं: -
-(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
{
}
- (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");
}
मैं सीखना शुरू कर रहा हूं कि स्विफ्ट के साथ कैसे कोड किया जाए और इसे भी हल करने की कोशिश की जा रही है, यही मैं स्विफ्ट के खेल के मैदान पर आया हूं:
// 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")
}
यह अंदर प्रिंट करता है