この回答は、ビューを操作しているのではなく、さまざまな長方形の領域を含むモデルを扱っているという前提に基づいています。
ボックスのリストをたどり、関数を使用するだけです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
}