我已经做了UISlider
的工作就像“滑动解锁”滑块。 我需要做的是确定在抬起手指离开被归类为点touchUpOUTSIDE
而不是touchUpINSIDE
。 这是你过去的滑块端滑动手指太远了点。 我想这是同一个UIButton
,你可以按下按钮,然后滑动手指离开按钮,这取决于你走多远,它仍然可以被归类为touchUpInside
。 如果可能的话,我想标记有圆圈的目标区域。
一旦我已经成功地寻找到这一点,是有可能改变吗? 所以我可以有一个更大的目标区域?
我真的不知道从哪里开始与此有关。 谢谢
根据该文档时, UIControlEventTouchUpOutside
当手指控制的范围之外时触发事件。 如果你想改变这种区域,滑块将随之扩大。 为什么不打领带的动作UIControlEventTouchUpOutside
到同UIControlEventTouchUpInside
?
这是我花了几个小时,但我已经成功地解决这。 我已经做了很多的测试压倒一切的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