gpt4 book ai didi

ios - UIControl 跟踪在不同 UIControl 上开始的触摸

转载 作者:行者123 更新时间:2023-12-01 16:16:02 27 4
gpt4 key购买 nike

我正在制作一个自定义 iOS 键盘,并有一个 UIControl 子类来表示我的按钮。我试图获得与普通 iOS 键盘相同的行为:

  • 用户开始触摸一个按钮
  • 用户拖动其他按钮(需要检测到这一点,以便他们可以相应地突出/取消突出显示)
  • 当用户抬起手指时记录实际的键盘“按下”;即触摸结束

  • 我正在使用这样的触摸跟踪方法进行测试:
    - (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
    [super beginTrackingWithTouch:touch withEvent:event];
    NSLog(@"Begin for %@", [self label]);
    return YES;
    }

    - (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
    [super continueTrackingWithTouch:touch withEvent:event];
    NSLog(@"Continue for %@", [self label]);
    return YES;
    }

    - (void)endTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event
    {
    [super endTrackingWithTouch:touch withEvent:event];
    NSLog(@"End for %@", [self label]);
    }

    这些方法都被调用,除了它们只在触摸开始的 UIControl 上被调用。

    识别在我的所有按钮上来来往往的触摸的最佳方式是什么?我必须通过父 View 完成所有操作吗?

    最佳答案

    如果提供,我会选择一个更好的答案......但如果有人通过搜索找到这个,我已经设法通过这种方式得到我需要的东西:

  • 设置 userInteractionEnabledNO对于按钮类(UIControl 子类)
  • 不要覆盖按钮类中的任何触摸方法
  • 实现touchesBegan:withEvent: , touchesMoved:withEvent:touchesEnded:withEvent:在 View Controller 中
  • 在每个事件上,从 UITouch 对象中提取位置
  • 遍历所有按钮 subview 并找到包含触摸位置的 subview :
    - (MyButton *)buttonForTouch:(UITouch *)touch
    {
    CGPoint windowLocation = [touch locationInView:keyboardView];
    for (MyButton *button in buttons) {
    if (CGRectContainsPoint([button frame], windowLocation)) {
    return button;
    }
    }
    return nil;
    }
  • 确定用户正在与哪个按钮交互后,让 View Controller 向相关按钮发送消息以调整其外观
  • 如果合适,请在 touchesBegan:withEvent: 中保留对 UITouch 实例的引用。所以你可以确定你在其他方法中跟踪的是同一个
  • 关于ios - UIControl 跟踪在不同 UIControl 上开始的触摸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26190857/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com