0

画面全体をUIScrollView占有し、片側に垂直ツールバーがあり、ユーザーがツールバーをドラッグすることによってのみスクロールできるように、スクロール動作を制限する必要があります。画面上の他の場所からドラッグしようとしても、スクロールは行われません。

touchesBegantouchesShouldCancelInContentView、およびをオーバーライドしようとしtouchesShouldBeginたので、タッチがツールバーで発生していない場合は呼び出しsetScrollEnabled:NO、そうである場合は を呼び出しますsetScrollEnabled:YESが、スクロールが無効になるとメソッドが起動しなくなり、デッドロックしたようです。また、ツールバーをボタンとして設定し、スクロールを有効にしてtouchDownと を無効にしtouchUpInsideてみましtouchUpOutsideた。これも機能しません。誰にもアイデアはありますか?

4

1 に答える 1

0

2番目のスクロールビューを使用して、メインのスクロールビューを制御します。スクロールが見えるようにグラデーションを追加しました。

#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
于 2012-10-22T21:08:45.213 に答える