3

touchesBeganユーザーが,メソッドで押し下げてから指を離したときに、「タッチアップインサイド」応答を実装する方法を誰かが知っているかどうか疑問に思っていtouchesEndedます。これは で実行できることはわかっていますが UITapGestureRecognizer、実際には、クイック タップでのみ機能するようにしようとしていUITapGestureRecognizerます ( では、指を長く押したまま離しても実行されます)。これを実装する方法を知っている人はいますか?

4

6 に答える 6

4

( 、、など)のすべての機能を模倣するには、を使用するUILongPressGesturizer方が実際にははるかに優れたソリューションです。UIButtontouchUpInsidetouchUpOutsidetouchDown

- (void) longPress:(UILongPressGestureRecognizer *)longPressGestureRecognizer
{
    if (longPressGestureRecognizer.state == UIGestureRecognizerStateBegan || longPressGestureRecognizer.state == UIGestureRecognizerStateChanged)
    {

        CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self];

        if (CGRectContainsPoint(self.bounds, touchedPoint))
        {
            [self addHighlights];
        }
        else
        {
            [self removeHighlights];
        }
    }
    else if (longPressGestureRecognizer.state == UIGestureRecognizerStateEnded)
    {
        if (self.highlightView.superview)
        {
            [self removeHighlights];
        }

        CGPoint touchedPoint = [longPressGestureRecognizer locationInView: self];

        if (CGRectContainsPoint(self.bounds, touchedPoint))
        {
            if ([self.delegate respondsToSelector:@selector(buttonViewDidTouchUpInside:)])
            {
                [self.delegate buttonViewDidTouchUpInside:self];
            }
        }
    }
}
于 2014-02-19T04:20:02.953 に答える
2

touchesBegan でトリガーされるタイマーを配置することでこれを行いました。touchesEnded が呼び出されたときにこのタイマーがまだ実行されている場合は、必要なコードを実行します。これにより、touchUpInside の効果が得られます。

  -(void) touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
    {
        NSTimer *tapTimer = [[NSTimer scheduledTimerWithTimeInterval:.15 invocation:nil repeats:NO] retain];
        self.tapTimer = tapTimer;
        [tapTimer release];
    }

    -(void) touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
    {
        if ([self.tapTimer isValid])
        {

        }
    }
于 2012-10-15T23:25:14.397 に答える
2

UIView サブクラスを作成してそこに実装することで、touchesBegan と touchesEnded を実装できます。

ただし、UILongPressGestureRecognizerを使用して同じ結果を得ることもできます。

于 2012-10-11T00:44:30.003 に答える
0

aUTapGestureRecognizerと aUILongPressGestureRecognizerを追加し、依存関係を追加できます[tap requiresGestureRecognizerToFail:longPress];(タップと長押しは、追加された認識エンジンのオブジェクトです)。

これにより、長押ししてもタップが検出されなくなります。

于 2012-10-11T02:35:55.803 に答える
0

BOOLいくつかの変数を作成してから、-touchesBeganどのビューまたは必要なものが触れられたかを確認し、このBOOL変数を に設定できますYES。その後、-touchesEndedこの変数がYESあなたのビューまたは必要なものに触れられているかどうかを確認してください-touchUpInside。もちろん、BOOL変数をNOafter に設定します。

于 2012-10-11T01:05:02.627 に答える