0

質問に対する潜在的な回答を見落とした場合は申し訳ありませんが、サブビューUIViewControllerクラス内のUILabelでUITapGestureRecognizerを使用するのに問題があります...

基本的に、UILabelと他のいくつかの無関係な要素を持つカスタムUIViewControllerを作成しました。ただし、このカスタム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:引数を取るメソッド?

誰かが私を正しい方向に向けることができれば、それは素晴らしいことです。どんな助けでも大歓迎です!

4

2 に答える 2

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];
}

これがお役に立てば幸いです。

于 2012-06-07T01:37:21.397 に答える
0

ジェスチャレコグナイザーを含むラベルを含むビューのフレームが必要な場合は、次のことを行うだけでは不十分です。

gestureRecognizer.view.superview.frame;

フレームを取得するには?

ジェスチャレコグナイザーのセレクターは、次の形式である必要があります

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

セレクターをに設定すると、レコグナイザーが自動的に渡され@selector(gestureRecognizerDidFire:)、ビュープロパティにアクセスできます。

于 2012-06-07T02:04:29.567 に答える