UIButton触发边界事件

UIButton触发边界事件时,事件并没有触发,而是到了远离button近70个像素时才收到回调。这是因为在UIButton周围会有70px的扩展范围。

与边界有关的事件:

UIControlEventTouchDragInside
UIControlEventTouchDragOutside
UIControlEventTouchDragEnter
UIControlEventTouchDragExit
UIControlEventTouchUpInside
UIControlEventTouchUpOutside

点击一个button的时候,“手指按下”会触发touchDown事件,“手指抬起”分两种,一种是内部抬起,对应TouchUpInside,另一种是外部抬起,对应TouchUpOutside。

当手指按下不松开,慢慢移动,对应事件为TouchDragxxx,其实有四种状态,分别是在内部拖拽TouchDragInside,在外部拖拽TouchDragOutside,拖拽移出(由内部而外)TouchDragExit,拖拽移进(由外向内部)TouchDragEnter。

“内部”和“外部”如何区分,其边界是什么?

开始已经说过了,在UIButton周围-从button的frame向四周扩展有一个70像素的响应范围,在button内部手指按下不抬起,接着慢慢拖动,会发现手指已经离开button的bounds了,但是button还是选中状态,直到超过(边界+70)的距离才会触发touchDragExit事件,也就是“手指离开button区域”了。

有些特殊时候,需要立即触发边界事件时.只需要在接收事件中 判断触摸的点有没有超出边界即可

[btn addTarget:self.action:@selector(btnDragged:withEvent:).forControlEvents:UIControlEventTouchDragOutside];

- (void)btnDragged:(UIButton*)sender withEvent:(UIEvent *)event
{
UITouch *touch = [[event allTouches] anyObject];
CGFloat boundsExtension = 25.0f;
CGRect outerBounds = CGRectInset(sender.bounds, -1 * boundsExtension, -1 * boundsExtension);
BOOL touchOutside = !CGRectContainsPoint(outerBounds, [touch locationInView:sender]);
if (touchOutside)
{//出边界了

}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值