3 回答

TA貢獻1943條經驗 獲得超7個贊
UIScrollView
啟用分頁的A 將停止在其幀寬(或高度)的倍數處。因此,第一步是確定您希望頁面的寬度。使那寬度UIScrollView
。然后,設置您需要的子視圖大小,并根據UIScrollView
寬度的倍數設置它們的中心。
然后,因為要查看其他頁,當然,設置clipsToBounds
以NO
作為mhjoy說明?,F在的技巧部分是當用戶在UIScrollView
框架范圍之外開始拖動時使其滾動。我的解決方案(當我最近必須這樣做時)如下:
創建一個包含其子視圖的子UIView
類(即ClipView
)UIScrollView
。從本質上講,它應該具有你認為UIScrollView
在正常情況下會有的框架。放置UIScrollView
在了中心ClipView
。確保ClipView
的clipsToBounds
設定為YES
如果其寬度小于其父視圖。另外,ClipView
需要參考一下UIScrollView
。
最后一步是覆蓋- (UIView *)hitTest:withEvent:
內部ClipView
。
- (UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event { return [self pointInside:point withEvent:event] ? scrollView : nil;}
這基本上擴展了UIScrollView
其父視圖框架的觸摸區域,正是您所需要的。
另一種選擇是子類化UIScrollView
并覆蓋它的- (BOOL)pointInside:(CGPoint) point withEvent:(UIEvent *) event
方法,但是你仍然需要一個容器視圖來進行剪切,并且可能很難確定何時YES
僅根據UIScrollView
框架返回。
注意: 您還應該查看Juri Pakaste的hitTest:withEvent:修改如果您遇到子視圖用戶交互問題。

TA貢獻2037條經驗 獲得超6個贊
ClipView
上面的解決方案對我有用,但我不得不做一個不同的-[UIView hitTest:withEvent:]
實現。Ed Marty的版本沒有讓用戶交互處理垂直滾動視圖我在水平滾動視圖中。
以下版本對我有用:
-(UIView*)hitTest:(CGPoint)point withEvent:(UIEvent*)event{ UIView* child = nil; if ((child = [super hitTest:point withEvent:event]) == self) return self.scrollView; return child;}

TA貢獻1816條經驗 獲得超4個贊
設置scrollView的幀大小,因為您的頁面大小將是:
[self.view addSubview:scrollView];[self.view addGestureRecognizer:mainScrollView.panGestureRecognizer];
現在你可以平移self.view
,滾動滾動上的內容。
還用于scrollView.clipsToBounds = NO;
防止剪切內容。
- 3 回答
- 0 關注
- 586 瀏覽
添加回答
舉報