スクロールビューを含むメインの UIView があります。このコードを使用して、4 種類のスワイプのメイン ビューに UIGestureRecognizer をセットアップしました。
UISwipeGestureRecognizer *swipeUpRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self action:@selector(upCommand)];
[swipeUpRecognizer setDirection:(UISwipeGestureRecognizerDirectionUp)];
[mainGameView addGestureRecognizer:swipeUpRecognizer];
... // Done 4 times for each direction
スクロールビューでスクロールを無効にすると、このコードはうまく機能します (画面のどこでもスワイプでき、関連するアクションが期待どおりに実行されます)。ただし、スクロールビューで 2 本の指をタッチすると、スクロールビューが通常機能するように前後にパンできるように機能を追加したいと考えています。スクロールビューにジェスチャ認識機能を追加して、2 本の指がパンしたことを検出しようとしました。
- (void)viewDidLoad
{
UIPanGestureRecognizer *panGestureRecognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(recognizePan)];
panGestureRecognizer.minimumNumberOfTouches = 2;
panGestureRecognizer.maximumNumberOfTouches = 2;
[scrollView addGestureRecognizer:panGestureRecognizer];
}
- (void)recognizePan
{
[gameScrollView setScrollEnabled:YES];
}
これを次の方法と組み合わせて使用し、指が離されたらスクロールを再び無効にしました。
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
[gameScrollView setScrollEnabled:NO];
}
この種はうまくいきましたが、私が望む方法ではありません。スクロールビューで 2 本の指をドラッグすると、スクロールが有効に設定されますが、その 2 本の指を使用してスクロールすることはできません。最初に 2 本の指を離す必要があり、それから 1 本の指でスクロールできるようになります (2 本の指は機能しません)。そして、スクロールビューをスクロールできる 1 本の指を離すと、 で設定されているように、スクロールが無効になりscrollViewDidEndDragging
ます。
明らかに、このタイプのスクロールはあまりユーザーフレンドリーではありませんが、スクロールビューを設定する方法が見つからないように見えるので、スクロールビューを2本の指でドラッグしているときにのみスクロールします。事前に助けてくれてありがとう。
~ 17 歳のアマチュア iOS 開発者 & ジェスチャ初心者
編集:この質問からの提案の 1 つに従って、UISubView のサブクラスを実装してデフォルトの touchesBegan メソッドをオーバーライドしようとしましたが、動作させることができませんでした。
CustomScrollView.h:
@interface CustomScrollView : UIScrollView
{
}
@end
CustomScrollView.m:
#import "CustomScrollView.h"
@implementation CustomScrollView
- (id)initWithFrame:(CGRect)frame
{
return [super initWithFrame:frame];
}
- (void) touchesBegan: (NSSet *) touches withEvent: (UIEvent *) event
{
// What goes here so that The action it can be called from the ViewController.h
}
@end
ViewController.h:
#import <UIKit/UIKit.h>
@class CustomScrollView;
@interface ViewController : UIViewController <UIScrollViewDelegate>
{
CustomScrollView *scrollView;
}
@end
ViewController.m:
- (void) touchesEnded: (NSSet *) touches withEvent: (UIEvent *) event
{
// What goes here?
}