iOS使用UITapGestureRecognizer与UILabel一起滑动到下一页

时间:2012-06-07 01:08:04

标签: objective-c uiscrollview uitapgesturerecognizer

很抱歉,如果我忽略了我的问题的潜在答案,但是我在使用UITapGestureRecognizer和子视图UIViewController类中的UILabel时遇到了麻烦......

基本上,我创建了一个自定义UIViewController,它有一个UILabel和一些其他不相关的元素。 但是,这个自定义UIViewController位于自定义的UIScrollView中,启用了分页,标签的偏移量足够大,因此您可以看到下一个UIViewController的标签。我想要做的是当用户触摸“下一个”标签时,scrollRectToVisible:animated:方法触发,实际上是在不滚动的情况下切换页面。 CustomViewController的UILabel位于顶部。

以下是将UITapGestureRecognizer添加到CustomViewController的UILabel时容器UIScrollView的示例代码:

[scrollView addSubview:CustomViewController];

- (void) addSubview: (CustomViewController *) view {
    // create view's frame here...
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fireScrollRectToVisible:view)]; // this is the current problem like a lot of people out there...
    [view.Label addGestureRecognizer:tap];
    // [super addSubview:view.view];
}
- (void) fireScrollRectToVisible: (CustomViewController *) cvc {
    CGRect frame = CGRectMake(cvc.view.frame.origin.x, cvc.view.frame.origin.y, 320, 480);
    [scrollView scrollRectToVisible: frame animated:YES];
}

我最初认为这很容易,但是由于@selector不允许你放置参数,因此它非常困难。我认为我需要的是访问CustomViewController的框架并将scrollRectToVisible设置为,但我不确定...

我已尝试过这篇文章,但我在Objective-C上很新,我不完全理解hitTest:withEvent: 我假设hitTest:(CGPoint)与视图的界限有关?

UITapGestureRecognizer initWithTarget:action: method to take arguments?

如果有人能指出我正确的方向那将是伟大的。 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

我会根据您的代码进行一些更改

- (void) addSubview: (CustomViewController *) view {
    // create view's frame here...
    UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(fireScrollRectToVisible:)]; // this is the current problem like a lot of people out there...
    [view.Label addGestureRecognizer:tap];
    // [super addSubview:view.view];
}
- (void) fireScrollRectToVisible: (UIGestureRecognizer *) gesture {
    UIView *view = [gesture.view superview];
    CGRect frame = CGRectMake(view.frame.origin.x, view.frame.origin.y, 320, 480);
    [scrollView scrollRectToVisible: frame animated:YES];
}
希望这可以帮到你。

答案 1 :(得分:0)

如果您需要包含包含手势识别器的标签的视图框架,那么您不能这样做:

gestureRecognizer.view.superview.frame;

获取框架?

手势识别器的选择器应为

形式
- (void)gestureRecognizerDidFire:(UIGestureRecognizer *)recognizer;

如果将选择器设置为@selector(gestureRecognizerDidFire:),识别器将自动通过,您可以访问其中的视图属性。