假設我有以下視圖層次結構;UIScrollView帶有用於contentSize的觸摸攔截器來控制子視圖
這些觀點實際上是ShinobiCharts,這是UIView的子類。視圖1是用戶可以觸摸的主要圖表(捏,平移,長按等)。該視圖依次控制其他視圖(視圖2,視圖3等)與特定的觸摸相關屬性(用戶平移視圖1,因此視圖2和3 ...必須相應地執行並平移)。 但是,一旦用戶滾動UIScrollView,View1可能會從屏幕上消失,只留下可見的視圖2,3等,這些視圖沒有相應的手勢識別器,因此用戶無法再與圖表交互,糟糕的用戶體驗。 我當然也可以在這些附加圖表中添加識別器,但是在捏合過程中,這意味着兩個手指必須位於單個視圖內,用戶不能只觸摸到他想要捏合和縮放的位置,再次,糟糕的用戶體驗。爲了簡化事情,我需要一些觸摸攔截器,覆蓋UIScrollView的整個內容區域,以便當用戶捏或平移時,相應的觸摸將被轉發到主圖表(視圖1),然後輪流可以更新其他子視圖。應始終可以垂直滾動UIScrollView。
實驗一:
我已經嘗試添加一個透明的UIView到覆蓋的UIScrollView的視圖控制器。 但是,即使直接引用View1,觸摸也不會被轉發。
-(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
[self.chartReference touchesBegan:touches withEvent:event];
}
我不太確定這是否是正確的方法來實現這個反正。
第二個實驗:
在圖表子視圖的UIScrollView中禁用的用戶交互,並添加自己的捏和平移手勢(在UIViewController中)到UIScrollView的。
問題; 1. UIScrollView不再滾動。 2.如何將這些手勢轉發到View1?
恐怕我現在無法提供更多的示例代碼,因爲沒有真正相關的代碼可以顯示。
編輯: 小實驗二; 手勢識別器已添加如下;
UIPinchGestureRecognizer *pinchGestureRecognizer = [[UIPinchGestureRecognizer alloc] initWithTarget:self action:@selector(pinchGesture:)];
pinchGestureRecognizer.cancelsTouchesInView = NO;
[scrollView addGestureRecognizer:pinchGestureRecognizer];
UIViewController上的同時手勢識別已啓用;
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer {
return YES;
}
編輯:
問題2爲實驗2已經被解決了。我沒有爲pan/pinch手勢設置正確的代表。 D'哦!
剩下的是如何轉發捏/平移手勢。
你嘗試了'UIScrollView'縮放功能。它支持默認捏縮放,你只需要提供將被縮放的視圖,所以我認爲你只需要確定屏幕上的哪個視圖並將其傳遞給'UIScrollView'。 – danypata 2014-11-21 12:13:54
放大UIScrollView看起來更像是一個簡單縮放UIScrollView的子視圖的解決方案,因此可以修改它們的大小。這不是我想要的。尺寸必須保持不變,因爲只有我的UIViews的內容需要改變,而這又由ShinobiChart本身處理。 – AlBirdie 2014-11-21 12:21:05