如何实现触摸的内心中的touchesBegan,touchesEnded

问题描述 投票:3回答:6

我不知道是否有人知道如何当用户按下然后抬起他们的手指在touchesBegantouchesEnded方法实施“润色内”的响应。我知道这可以用UITapGestureRecognizer来完成,但实际上我试图让这个它仅适用于快速水龙头(与UITapGestureRecognizer,如果你有握住你的手指很长一段时间,然后抬起,它仍然执行)。任何人都知道如何实现这一点?

iphone ios cocoa-touch uigesturerecognizer
6个回答
4
投票

使用UILongPressGesturizer实际上是一个更好的解决方案,以模仿所有的UIButton的功能(touchUpInsidetouchUpOutsidetouchDown等):

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

2
投票

您可以通过创建一个UIView子类,并实现它有实现的touchesBegan和touchesEnded。

然而,你也可以使用一个UILongPressGestureRecognizer并获得相同的结果。


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])
        {

        }
    }

1
投票

我不知道添加它时,但是属性isTouchInside为任何UIControl派生类对象生命的救星(例如UIButton)。

override func endTracking(_ touch: UITouch?, with event: UIEvent?) {
    super.endTracking(touch, with: event)
    if isTouchInside {
        // Do the thing you want to do
    }
}

这里的Apple official docs


0
投票

你可以创建一些BOOL变量然后在-touchesBegan检查你需要十分感动,设置这个BOOL变量YES什么看法或什么的。之后,在-touchesEnded检查,如果这个变量是YES和你的看法或任何你需要被感动了,这将是你的-touchUpInside。当然,设置BOOL变量后NO


0
投票

您可以添加一个UTapGestureRecognizerUILongPressGestureRecognizer和使用[tap requiresGestureRecognizerToFail:longPress];(点击并长按是增加识别的对象)添加依赖。

这样一来,水龙头也不会,如果长按了发射检测。

© www.soinside.com 2019 - 2024. All rights reserved.