UIButton拖动响应事件,距离问题

UIControlEventTouchDragInside当一次触摸在控件窗口内拖动时。UIControlEventTouchDragOutside当一次触摸在控件窗口之外拖动时。UIControlEventTouchDragEnter当一次触摸从控件窗口之外拖动到内部时。UIControlEventTouchDragExit当一次触摸从控件窗口内部拖动到外部时。

[btn addTarget:self action:@selector(sendButtonDrag:withEvent:) forControlEvents:UIControlEventTouchDragInside];
[btn addTarget:self action:@selector(sendButtonDrag:withEvent:) forControlEvents:UIControlEventTouchDragOutside];

  • (IBAction)sendButtonDrag:(UIButton *)sender withEvent:(UIEvent *)event {
    if ([self isInButtonBounds:sender event:event]) {
    // 在里面
    } else {
    // 在外面
    }
    }

  • (BOOL)isInButtonBounds:(UIButton *)button event:(UIEvent *)event {
    UITouch *touch = [[event allTouches] anyObject];
    CGFloat boundsExtension = 5.0f; //扩展范围阀值
    CGRect outerBounds = CGRectInset(button.bounds, -1 * boundsExtension, -1 * boundsExtension);
    BOOL touchOutside = !CGRectContainsPoint(outerBounds, [touch locationInView:button]);
    if (touchOutside) {
    BOOL previewTouchInside = CGRectContainsPoint(outerBounds, [touch previousLocationInView:button]);
    if (previewTouchInside) {
    // UIControlEventTouchDragExit
    } else {
    // UIControlEventTouchDragOutside
    }
    return NO;
    } else {
    BOOL previewTouchOutside = !CGRectContainsPoint(outerBounds, [touch previousLocationInView:button]);
    if (previewTouchOutside) {
    // UIControlEventTouchDragEnter
    } else {
    // UIControlEventTouchDragInside
    }
    return YES;
    }
    }

  • (IBAction)sendAudioRecordButton:(id)sender withEvent:(UIEvent *)event {
    if ([self isInButtonBounds:sender event:event]) {
    // 点击按钮
    }
    }
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容