检索和更改在此touchUpInside变为touchUpOutside点(Retrieve and

2019-10-16 19:25发布

我已经做了UISlider的工作就像“滑动解锁”滑块。 我需要做的是确定在抬起手指离开被归类为点touchUpOUTSIDE而不是touchUpINSIDE 。 这是你过去的滑块端滑动手指太远了点。 我想这是同一个UIButton ,你可以按下按钮,然后滑动手指离开按钮,这取决于你走多远,它仍然可以被归类为touchUpInside 。 如果可能的话,我想标记有圆圈的目标区域。

一旦我已经成功地寻找到这一点,是有可能改变吗? 所以我可以有一个更大的目标区域?

我真的不知道从哪里开始与此有关。 谢谢

Answer 1:

根据该文档时, UIControlEventTouchUpOutside当手指控制的范围之外时触发事件。 如果你想改变这种区域,滑块将随之扩大。 为什么不打领带的动作UIControlEventTouchUpOutside到同UIControlEventTouchUpInside



Answer 2:

这是我花了几个小时,但我已经成功地解决这。 我已经做了很多的测试压倒一切的touchesMoved,touchesEnded和sendAction的:行动:目标:事件,似乎为触摸内框类70像素,任何触摸内部。 因此,对于一个UISlider这292x52从x中任何触摸:-70至x:362或y:-70至122将计为内触摸,即使它的框架之外。

我想出了这个代码,将覆盖自定义类允许的100px的一个更大的区域周围的框架算作内的触摸:

#import "UICustomSlider.h"

@implementation UICustomSlider {
    BOOL callTouchInside;
}

-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
    callTouchInside = NO;
    [super touchesMoved:touches withEvent:event];
}

-(void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event
{
    CGPoint touchLocation = [[touches anyObject] locationInView:self];
    if (touchLocation.x > -100 && touchLocation.x < self.bounds.size.width +100 && touchLocation.y > -100 && touchLocation.y < self.bounds.size.height +100) callTouchInside = YES;

    [super touchesEnded:touches withEvent:event];
}

-(void)sendAction:(SEL)action to:(id)target forEvent:(UIEvent *)event
{
    if (action == @selector(sliderTouchOutside)) {                          // This is the selector used for UIControlEventTouchUpOutside
        if (callTouchInside == YES) {
            NSLog(@"Overriding an outside touch to be an inside touch");
            [self sendAction:@selector(UnLockIt) to:target forEvent:event]; // This is the selector used for UIControlEventTouchUpInside
        } else {
            [super sendAction:action to:target forEvent:event];
        }
    } else {
        [super sendAction:action to:target forEvent:event];
    }
}

随着一点点的调整,我应该能够使用它的对面还。 (使用接近触摸作为外部触摸)。



文章来源: Retrieve and change the point at which touchUpInside changes to touchUpOutside