내 iOS 앱에는 많은 상자 (사각형)가 있습니다. 화면상의 터치가 어느 상자 안에 있는지를 감지 할 수있는 최상의 데이터 구조가 무엇인지 궁금합니다.터치 포인트가 속한 직사각형을 결정하십시오.
나는 GameplayKit에서 GKRTree와 GKQuadTree에 대해 읽었습니다. 그 중 누구도 내가 필요한 것만은 아닌 것처럼 보입니다. GKRTree는 유연한 쿼드를 허용하지만 한 지점까지 쿼리를 지원하지 않습니다. GKQuadTree는 점으로 쿼리를 지원하지만 유연한 모양/크기를 허용하지 않습니다.
도와주세요. 감사
EDIT : 대상 상자 안의 상자가있는 쿼리가 대상 상자를 반환하지 않는다는 것을 보여주기 위해 샘플 코드를 추가하십시오.
import UIKit
import GameplayKit
// target rec.
let rec1v1 = vector_float2(0.0, 0.0)
let rec1v2 = vector_float2(10.0, 10.0)
// outside target rec
let rec2v1 = vector_float2(11.0, 11.0)
let rec2v2 = vector_float2(12.0, 12.0)
//small box inside target rec
let rec3v1 = vector_float2(1.0, 1.0)
let rec3v2 = vector_float2(2.0, 2.0)
// small box intersect with target rec
let rec4v1 = vector_float2(9.0, 9.0)
let rec4v2 = vector_float2(11.0, 11.0)
var mytree = GKRTree<NSString>(maxNumberOfChildren: 3)
mytree.addElement("rec1v1",
boundingRectMin: rec1v1,
boundingRectMax: rec1v2,
splitStrategy: GKRTreeSplitStrategy.linear)
let t1 = mytree.elements(inBoundingRectMin: rec2v1, rectMax: rec2v2) // return [] (outside)
let t2 = mytree.elements(inBoundingRectMin: rec3v1, rectMax: rec3v2) // return [] (inside target box but smaller)
let t3 = mytree.elements(inBoundingRectMin: rec1v1, rectMax: rec1v2) // return ["rec1v1"] (same box)
let t4 = mytree.elements(inBoundingRectMin: rec4v1, rectMax: rec4v2) // return [] (intersect with target box but not containing)
EDIT2 : 나는 this post 통해 온, 그것은 매우 같은 문제입니다. 나는 신속하고 객관적인 실행을 찾고 싶다.
메모 주셔서 감사합니다. 그게 정확히 내가하려고했던 것이었다. 그러나, 그것은 내 경우에는 작동하지 않는 것 같습니다. 문제는 다음과 같습니다. 터치 포인트 (작은 직사각형으로 확장)를 작게 설정하고 대상 상자 내부에있는 경우 해당 대상 상자는 GKRTree에 의해 반환되지 않습니다. 사실, 대상 상자와 쿼리 rect가 교차한다고 정의하더라도 대상 상자를 반환하지는 않습니다. 여기 내 샘플 코드입니다. 내 질문에 샘플 코드를 추가하고 있습니다. –
자, 저는 여러분이 "작은 사각형"(내 대상 상자를 포함 할 꽤 큰 rec)으로 무엇을 의미하는지 알고 있다고 생각합니다. 제 경우에는 그렇게 할 수있는 일이 필요할 것입니다. 목표 모양이 잘 정의되지 않았기 때문입니다. –
모든 사각형은 뷰가 아닙니까? –