1


UIScrollview の 3 ページ目のスクロールを防止し、「スワイプを乗っ取る」ジェスチャで sth をトリガーしたいと考えています。そうしないと。このアクションの後、スクロールを反応させたいと思います。

これは動作しません。

- (void)scrollViewDidScroll:(UIScrollView *)sender
{
    if(scrollView.contentOffset.x == self.view.frame.size.width * 2  ) {
        // disable scrolling
        scrollView.scrollEnabled = NO;
    }
}


// hijack the next scrolling event
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

scrollEnabled = NO の場合、このデリゲートは呼び出されません

助けてくれてありがとう


EDIT EventHandler は呼び出されません ;-(

- (void)viewDidLoad
{
    [super viewDidLoad];

    // Default background color
    self.view.backgroundColor = [UIColor redColor];

    // Create scroll view
    scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height)];
    scrollView.pagingEnabled = YES;
    scrollView.showsHorizontalScrollIndicator = NO;
    scrollView.showsVerticalScrollIndicator = NO;
    scrollView.scrollsToTop = NO;
    scrollView.delegate = self;


    UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
    recognizer.direction = UISwipeGestureRecognizerDirectionLeft;
    [scrollView addGestureRecognizer:recognizer];
    [recognizer release];
    [scrollView delaysContentTouches];

    // Create subviews (pages)
    NSInteger numberOfViews = 4;
    for (int i = 0; i < numberOfViews; i++) {
        // x pos
        CGFloat yOrigin = i * self.view.frame.size.width;

        // Create subview and add to scrollView
        UIView *pageView = [[UIView alloc] initWithFrame:CGRectMake(yOrigin, 0, self.view.frame.size.width, self.view.frame.size.height)];
        pageView.backgroundColor = [UIColor colorWithRed:0.5/i green:0.5 blue:0.5 alpha:1];

        [scrollView addSubview:pageView];
        [pageView release];
    }

    // Set contentsize
    scrollView.contentSize = CGSizeMake(self.view.frame.size.width * numberOfViews, self.view.frame.size.height);


    // Add scrollView to view and release
    [self.view addSubview:scrollView];
    [scrollView release];

}


-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    NSLog(@"swipe!!!!");
    scrollView.scrollEnabled = YES;
}
4

1 に答える 1

2

スクロール ビューを無効にした場合:

    scrollView.scrollEnabled = NO;

デリゲート メソッドが呼び出されないことは避けられないため、ハイジャック モードでスワイプを処理する別の方法が必要です。試してみることのできることの 1 つはUISwipeGestureRecognizer、単にスクロールを無効にする代わりに : を使用するUISwipeGestureRecognizerことです。ビューに a を関連付けて、ハンドラー メソッドからスワイプを処理できます。

UISwipeGestureRecognizer *recognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(handleSwipeFrom:)];
recognizer.direction = UISwipeGestureRecognizerDirectionRight;
[self.view addGestureRecognizer:recognizer];

そして、handleSwipeFromスクロールを再度有効にします:

-(void)handleSwipeFrom:(UISwipeGestureRecognizer *)recognizer {
    // do your hijack here
    scrollView.scrollEnabled = YES;
}
于 2012-06-14T15:25:42.443 に答える