我想確定包含用戶在iOS 7中點擊的圖像的視圖。下面是我的佈局。如何確定iOS中的UIImageView的超級視圖
+-------------------------------+
| A |
| +---------------------------+ |
| |B | |
| |+--+ +--+| |
| ||C | ------------------|D || |
| |+--+ +--+| |
| | | | | |
| | | G | | |
| | | | | |
| |+--+ +--+| |
| ||E | ------------------|F || |
| |+--+ +--+| |
| +---------------------------+ |
+-------------------------------+
Legend:
A - UIView
B - UIView subview of A
C, D, E, F - UIImageView subviews of B
G - UIImageView subview of A
我做了整個窗口層次的轉儲並正確顯示C,d,E,F爲B和B,G的子視圖A的子視圖這整個視圖層次始建於IB和作爲XIB加載。
在用戶點擊UIImageView C的情況下,我想知道它是超級視圖B.但是,當我在class C的hittest中執行self.superview時,它始終爲零。
如何確定UIImageView(C,D,E,F)超級視圖?
如果你想知道,我試圖創建夾點(C,D,E,F)來操縱G中的圖像。我一次在屏幕上有多個A實例,需要知道哪一個是被挖掘的抓地力的超級視圖。
我在這裏錯過了一些概念,並感謝您的指導。
更新:這裏有意見的IB層次:
下面是實際的廈門國際銀行:
下面是在C級則hitTest斷點視圖轉儲:
UIWindow:<UIWindow: 0xb174590
| UILayoutContainerView:<UILayoutContainerView: 0xb17a7f0
| | UINavigationTransitionView:<UINavigationTransitionView: 0xb17c160
| | | UIViewControllerWrapperView:<UIViewControllerWrapperView: 0xb18f640
| | | | CanvasBackgroundView:<CanvasBackgroundView: 0xa63be10
| | | | | DragView:<DragView: 0xa6aec60
| | | | | | BorderView:<BorderView: 0xa6b92c0
| | | | | | | GripView:<GripView: 0xa6b2480
| | | | | | | GripView:<GripView: 0xa6bb020
| | | | | | | GripView:<GripView: 0xa6b29e0
| | | | | | | GripView:<GripView: 0xa6bb0d0
| | | | | | ContentImageView:<ContentImageView: 0xa6bb340
@Timothy,我所有的則hitTest方法是這樣的:
-(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
{
DDLogVerbose(@"%@ superview: %@", NSStringFromClass([self class]), NSStringFromClass([[self superview] class]));
UIView *hitView = [super hitTest:point withEvent:event];
if (self == hitView) {
DDLogVerbose(@"hit for me: %@ %@ %@ self:%@", NSStringFromCGPoint(point), NSStringFromClass([hitView class]), NSStringFromCGRect(hitView.frame), NSStringFromCGRect(self.frame));
return self; // we handled it
} else {
DDLogVerbose(@"hit not for me: %@", NSStringFromCGPoint(point));
return nil; // not for us
}
}
你說「在C類hitTest裏面」。你是如何確定這一點的。如果你已經分類了'UIImageView'並覆蓋'hitTest',請發佈這個類的代碼。 'hitTest'不會在不在層次結構中的視圖上調用,所以它會有一個超級視圖或是頂層視圖。我的寵物理論是你正在看一個局部變量的'superview',它實際上是'零'。 –
@蒂莫西,我編輯了這篇文章,以便我可以獲取代碼格式。我實際上是直接記錄[self superview]。我也在hitTest中設置了斷點,並且po表明它是零。順便說一下,我在所有hitTest方法中設置了斷點,並且除了gripViews(C,D,E,F)以外,超視圖對所有類都是正確的。我一遍又一遍地瀏覽XIB,看不出什麼奇怪的東西。就像你說的那樣,hitTest是觸發的,所以它在鏈中。 – Dan
除了重寫的'hitTest'方法(例如自定義初始化程序)以外,'GripView'中是否還有其他內容?另外,我會用'[super addSubview:view]'覆蓋'BorderView'的'addSubview''並驗證傳入視圖是否在添加後設置了其'superview'屬性。只是爲了好玩,試着在BorderView中添加一個普通的'UIImageView'。 –