2013-03-27 115 views
1

嗨,夥計們!嵌套UIScrollView - 滾動方向

我有一個關於嵌套滾動視圖的問題。

有一個包含嵌套滾動視圖的滾動視圖。我只會撥打外滾動視圖內滾動視圖。 外部滾動視圖是水平滾動視圖,內部滾動視圖是垂直滾動視圖。

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    // Do any additional setup after loading the view, typically from a nib. 

    _outerScrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds]; 
    _outerScrollView.pagingEnabled = YES; 
    _outerScrollView.contentSize = CGSizeMake(_outerScrollView.frame.size.width * 3, _outerScrollView.frame.size.height); 
    [self.view addSubview:_outerScrollView]; 

    for(int i=0; i<3; i++) { 

     UIScrollView *innerScrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(i * _outerScrollView.frame.size.width, 
                          0, 
                          _outerScrollView.frame.size.width, 
                          _outerScrollView.frame.size.height)]; 
     [_outerScrollView addSubview:innerScrollView]; 


     UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 0, innerScrollView.frame.size.width, innerScrollView.frame.size.height * 2.0)]; 
     contentView.backgroundColor = [UIColor colorWithPatternImage:[UIImage imageNamed:@"imagefile"]]; 
     [innerScrollView addSubview:contentView]; 

     innerScrollView.contentSize = contentView.frame.size; 

    } 
} 

基本上,如果只有1個滾動視圖將在同一時間滾動。

如果我滾動到,然後外滾動視圖將滾動。

如果我滾動到頂部底部,然後內滾動視圖將滾動,

AND,如果我滾動,既的一個將被滾動。這取決於滾動的方向。

enter image description here

如果角度爲0〜45度,內滾動視圖將滾動。 如果角度爲45〜90度,則會滾動外滾動視圖

是否可以更改ANGLE

例如,即使角度是30度,我想水平滾動。

謝謝!如果你想有一個簡單的方法來實現這種滾動型的嵌套的動作,你可以嘗試簡單地禁用水平滾動的內部意見,並禁用垂直滾動的外觀圖

任何幫助,將不勝感激:)

+1

您可以嘗試使用TouchesMethods(http://stackoverflow.com/a/7447713/1059705)和http://stackoverflow.com/a/1686087/1059705,並獲取起始點和拖動點之間的角度。 – Bala 2013-03-27 06:20:11

回答

1

。但是,如果這不能爲您提供所需的結果,則需要進行大量的自定義編碼。

首先,你需要開始你自己的UIScrollView的子類。通過覆蓋這些功能開始:

touchesBegan: 
touchesMoved: 
touchesEnded: 
touchesCancelled: 

touchesShouldBegin: 

從那裏,你必須做你自己的計算,以確定拖動的角度,並相應地將郵件發送給scrollviews,可能是致電super上述一項或多項功能。你也可以考慮從頭開始編寫自己的scrollview,你可以簡單地將UIView作爲子類的子視圖。

+0

我試圖解決這些方法重寫UIView和UIScrollView的問題,但我不能。我想我需要創建自己的scrollview並控制一切......無論如何非常感謝你!乾杯! – Joey 2013-04-04 00:48:53

+0

永遠不要從頭創建自己的滾動視圖。 iOS體驗由強大的UIScrollView的行爲/物理定義。即使您已經足夠好地對一個iOS版本的行爲進行反向工程,但祝您好運發現後續版本中的更改。 – jarjar 2013-08-14 06:02:25

+0

我並不是建議從頭開始編寫scrollview。我正在考慮更多的東西,根據這些函數檢測滑動角度,然後只允許其中一個滾動視圖移動。也許這可以通過在每個函數中有選擇地調用'super'或通過改變'userInteractionEnabled'來工作。 – WolfLink 2013-08-14 19:11:37