ios - 如何正确继承 UIControl?

标签 ios objective-c uicontrol

我不想要 UIButton 或类似的东西。我想直接继承 UIControl 并制作我自己的非常特殊的控件。

但由于某种原因,我覆盖的任何方法都没有被调用。目标 Action 的东西有效,目标接收适当的 Action 消息。但是,在我的 UIControl 子类中,我必须捕获触摸坐标,而这样做的唯一方法似乎是覆盖这些人:

- (BOOL)beginTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
    NSLog(@"begin touch track");
    return YES;
}

- (BOOL)continueTrackingWithTouch:(UITouch *)touch withEvent:(UIEvent *)event {
    NSLog(@"continue touch track");
    return YES;
}

它们永远不会被调用,即使 UIControl 是使用 UIViewinitWithFrame: 中的指定初始化程序实例化的。

我能找到的所有示例总是使用 UIButtonUISlider 作为子类化的基础,但我想更接近 UIControl 因为那是我想要的来源:快速且无延迟的触摸坐标。

最佳答案

我知道这个问题很古老,但我也遇到了同样的问题,我想我应该给我 2 美分。

如果您的控件有任何 subview ,则可能不会调用 beginTrackingWithTouchtouchesBegan 等,因为这些 subview 正在吞噬触摸事件。

如果您不希望这些 subview 处理触摸,您可以将 userInteractionEnabled 设置为 NO,这样 subview 就会简单地传递事件。然后你可以覆盖 touchesBegan/touchesEnded 并在那里管理你的所有触摸。

希望这会有所帮助。

关于ios - 如何正确继承 UIControl?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1245248/

相关文章:

ios - 有没有使用 iPhone X ARKit 创建人脸识别和检测应用程序的方法?

ios - 从 UIImage 输出固定大小的 JPEG

ios - 管理自定义 UIControl 上的事件

iphone - iOS 中的 PBEWithMD5AndDES 加密

iOS 超正方体 : bad results

objective-c - 以编程方式制作 mac 包/包

uitableview - 由于更新到xcode 12,所以我无法在UITableViewCell内放置任何UIControl

ios - 如何为自定义 uicontrol 和 controller 添加触摸事件?

ios - 丰富的推送通知 - 视频不会在通知内容扩展中播放

iphone - 应用商店 : Remove iPhone 3G compatibility from my app (because VoiceOver is required)