이 답변은 당신이 하지가보기 작업하고있는 가정을 기반으로 미리 만들어진 기능을 사용할 수는 오히려 당신이 포함 된 모델을 다루고을 얻기 위해 시도 할 수 있습니다 다른 직사각형 영역.
당신은 단순히 기능 예를 들어
BOOL CGRectContainsPoint(rect, point);
를 상자의 목록을 통과하고, 사용
(당신의 사각형이 NSValues에 박스되는 가정이있는 NSArray에 저장하기) :
NSArray* arrayOfRects = ...;
CGPoint point = CGPointMake(xTouch, yTouch);
CGRect rectResult = CGRectNull;
for (NSValue* rectObj in arrayOfRects) {
CGRect rect = [rectObj CGRectValue];
if (CGRectContainsPoint(rect, point)) {
rectResult = rect;
break;
};
}
if (!CGRectEqualToRect(rectResult, CGRectNull)) {
// Found a matching rect!
}
else {
// Touch was outside of any recognised rect
}
이 솔루션의 원 겹치는 사각형을 다루지 않습니다. 이를 원하면 다음과 같이 일치 항목을 유지해야합니다.
NSArray* arrayOfRects = ...;
CGPoint point = CGPointMake(xTouch, yTouch);
NSMutableArray* rectResultArray = [NSMutableArray array];
for (NSValue* rectObj in arrayOfRects) {
if (CGRectContainsPoint([rectObj CGRectValue], point)) {
[rectResultArray addObject:rectObj];
};
}
if (rectResultArray.count > 0) {
// Found matching rects!
}
else {
// Touch was outside of any recognised rect
}
이렇게 복잡해지고있는 것처럼 들리 네요. 터치 이벤트를 캡처하면 touch.view가 상자 a 또는 상자 c와 같은지 확인할 수 있습니다. 어쩌면 UITapGestureRecognizer (클래스라고 생각합니다)를 살펴보고 제스처 인식기를 추가하십시오. – JeffRegan