0

長押しジェスチャをシミュレートするためにUIGestureRecognizer呼び出されるサブクラスを作成しました。LongPressGestureRecognizer(はい、すでに存在する具体的なサブクラスについては知っています。目的の c を学習し、少し実験しています。)

次のメソッドのみをオーバーライドしました。

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
    self.state = UIGestureRecognizerStatePossible;
    [self performSelector:@selector(setState:) withObject:[NSNumber numberWithInt:UIGestureRecognizerStateRecognized] afterDelay:2];
}

- (void)touchesCancelled:(NSSet *)touches withEvent:(UIEvent *)event
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    self.state = UIGestureRecognizerStateCancelled;
}

- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    [NSObject cancelPreviousPerformRequestsWithTarget:self];
    self.state   = UIGestureRecognizerStateFailed;
}

recognizerジェスチャ認識エンジンを格納するプロパティを持つビュー コントローラーには、次のコードがあります。

- (LongPressGestureRecognizer *)recognizer
{
    if (!_recognizer) {
        _recognizer = [[LongPressGestureRecognizer alloc] init];
    }
    return _recognizer;
}

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.recognizer addTarget:self action:@selector(log:)];

    [self.view addGestureRecognizer:self.recognizer];
}

- (IBAction)log:(LongPressGestureRecognizer *)recognizer
{
    //blah blah blah
}

私の問題は、log:まったく呼び出されないことです...UIGestureRecogniserStateコンソールにsを記録することにより、状態に関する限り、ジェスチャ認識機能が期待どおりに機能していることがわかります...

ここで何が間違っていますか?

4

1 に答える 1

0

他の問題もあるかもしれませんが、あなたの-performSelector:withObject:afterDelay:電話はあなたが望んでいるようには機能しないと言えます。NSNumberの代わりにオブジェクトへのポインターを渡すことになるintため、state何らかのジャンク値に設定されます。実行するメソッドを作成し、self.state = UIGestureRecognizerStateRecognized代わりにそれを呼び出します。

于 2013-05-22T01:21:55.590 に答える