2012-03-27 15 views
0

我有一個包含一堆子視圖的視圖。如果用戶點擊並拖動某些子視圖的選擇矩形,是否有更快的方式確定哪些子視圖與選擇矩形相交,而不是迭代主父級的所有子視圖?如何快速確定與rect相交的所有子視圖(UIViews)?

我的解決方案通過遍歷每個子視圖並使用CGRectIntersectsRect(selectionRect, aSubview.frame)來工作,但它對我的喜好來說太慢了。

回答

1

簡短的回答是否定的。長篇答案主要是因爲frame計算得出的屬性,函數爲bounds,centertransform。即使是簡單的命中測試也是基於迭代的。

真正的問題是爲什麼你認爲它太慢。如果您有數百個視圖,那麼我建議緩存視圖的幀,例如,在touchesBegan:withEvent:中保存幀計算和每次必須檢查交叉點(如您拖動手指)時發送的Objective-C消息。也許,你也可以應用一些優化技巧,比如按照框架來排序視圖,但這會使你的代碼複雜化。

+0

是的,當子視圖添加到主視圖中時,我可能會實現某種緩存選項。如果我將它們以某種方式存儲在NSDictionary/NSSet中進行查找,我想我可以更快地工作。感謝您的額外信息。 – jhawne 2012-03-27 16:45:10

相關問題