2012-10-22 104 views
0

我有一個UIScrollView佔用我的整個屏幕與一個垂直工具欄在一邊,我需要限制滾動的行爲,使用戶只能通過拖動工具欄滾動。如果他們試圖從屏幕上的其他地方拖動,則不應該發生滾動。UIScrollView與活動和非活動區域

我試圖重寫touchesBegantouchesShouldCancelInContentViewtouchesShouldBegin因此,如果觸摸沒有工具欄我打電話setScrollEnabled:NO和起源,如果它確實我叫setScrollEnabled:YES,但似乎一旦滾動被禁用的方法不再火和我僵持不下。還嘗試設置工具欄作爲按鈕,並啓用滾動touchDown和禁用touchUpInsidetouchUpOutside。這也是行不通的。有人有主意嗎?

回答

0

使用第二個滾動視圖來控制主滾動視圖。我添加了一個漸變,以便能夠看到滾動。

#import <QuartzCore/QuartzCore.h> 

@implementation ScrollViewController { 
    UIScrollView *mainScrollView; 
} 

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    CGRect mainScrollViewRect = CGRectMake(0, 0, self.view.bounds.size.width - 100, self.view.bounds.size.height); 
    mainScrollView = [[UIScrollView alloc] initWithFrame:mainScrollViewRect]; 
    mainScrollView.scrollEnabled = NO; 
    mainScrollView.contentSize = CGSizeMake(self.view.bounds.size.width - 100, 1000); 
    [self.view addSubview:mainScrollView]; 

    CAGradientLayer* gradientLayer = [CAGradientLayer layer]; 
    gradientLayer.startPoint = CGPointMake(0, 0); 
    gradientLayer.endPoint = CGPointMake(1, 1); 
    gradientLayer.frame = CGRectMake(0, 0, mainScrollView.contentSize.width, mainScrollView.contentSize.height); 
    gradientLayer.colors = @[(id)[[UIColor blackColor] CGColor], (id)[[UIColor whiteColor] CGColor]]; 
    [mainScrollView.layer insertSublayer:gradientLayer atIndex:0]; 

    CGRect toolbarRect = CGRectMake(self.view.bounds.size.width - 100, 0, 100, self.view.bounds.size.height); 
    UIScrollView *toolbarScrollView = [[UIScrollView alloc] initWithFrame:toolbarRect]; 
    toolbarScrollView.delegate = self; 
    toolbarScrollView.contentSize = CGSizeMake(0, 1000); 
    toolbarScrollView.backgroundColor = [UIColor yellowColor]; 
    [self.view addSubview:toolbarScrollView]; 
} 

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    mainScrollView.contentOffset = scrollView.contentOffset; 
} 

@end 
+0

我想我在初始描述中還不夠清楚。工具欄不是滾動視圖;它只是一個用戶可以點擊的錨點,然後在屏幕上拖動,就像通過從最後拖動窗簾來打開窗簾一樣。合理? – user1766463

+0

不是,你有你想要做什麼的形象?你的意思是一個垂直的滑塊,說像一個窗簾的工具欄? –

+0

讓我重新開始。該應用程序將以橫向模式啓動,滾動視圖將填充整個屏幕,並沿着左邊緣呈現垂直「條」。滾動視圖的內容區域的寬度是屏幕的兩倍,但用戶只能通過從左側拖動到右側(並再次返回)進行滾動。在其他地方輕掃手勢應該被忽略。我最初稱它爲「工具欄」,因爲它將具有與其他功能相關的按鈕。 – user1766463