【问题标题】:Why does a check for UIGestureRecognizer find it on iPhone OS 3.0, when it was introduced in 3.2?为什么对 UIGestureRecognizer 的检查会在 iPhone OS 3.0 上找到它,而它是在 3.2 中引入的?
【发布时间】:2010-09-12 15:36:29
【问题描述】:

我是第一次使用 UIGestureRecognizer,我希望我的应用能够在 iOS 3.0 及更高版本上运行。 由于 Apple 明确声明该库在 iOS 3.2 及更高版本中可用,因此我使用了以下代码:

// Make sure that Gesture recognition technology is supportted by the device SDK version
if ([UIGestureRecognizer instancesRespondToSelector:@selector(initWithTarget:action:)])
{
    [self initGestureRecognizers];
}

令人惊讶的是,当我在我唯一的目标上运行该应用程序时,它运行 SDK3.0,它运行良好。


我将条件替换为以下内容:

if ([[[UIDevice currentDevice] systemVersion] compare:@"3.2"] != NSOrderedAscending) 
{ 
    [self initGestureRecognizers]; 
}

我很想得到 cmets 的帮助。

谢谢

【问题讨论】:

  • zomg 我喜欢这个问题的标题
  • 你是在3.0的真机上测试还是在模拟器上测试?并且......识别器是否工作或代码被跳过?
  • 嗨 Eiko,我正在设备上进行测试,识别器实际上可以正常工作。
  • 标题可能很有趣,但有一个有意义的主题对于试图帮助的人以及未来搜索相关或相同问题的人都很重要。
  • 很抱歉破坏了乐趣,但这个问题确实需要一个更具描述性的标题。

标签: iphone cocoa-touch iphone-sdk-3.0 uigesturerecognizer


【解决方案1】:

这可能是因为 UIGestureRecognizer 在 3.2 之前被认为是私有的。如果您在 3.0 下使用 UIGestureRecognizer,如果有些事情有问题或无法按预期工作,请不要感到惊讶。

【讨论】:

  • 就是这样。我还注意到 UIGestureRecognizer 和一些具体的类,如UITapGestureRecognizer (IIRC) 确实存在于 3.0 上,但被认为是 Apple 私有的,即不被应用程序使用。他们没有实现现在记录的所有内容,例如。 G。我认为UITapGestureRecognizer 上没有numberOfTapsRequired 属性。
  • 以下似乎工作正常。你怎么看? if ([[[UIDevice currentDevice] systemVersion] compare:@"3.2"] != NSOrderedAscending) { [self initGestureRecognizers]; }
【解决方案2】:

每个 iOS 版本中都有大量未记录的 API,Apple 确实提到了这一点。然而,使用这些未记录的 API 是应用商店拒绝的理由。使用在一个给定的操作系统版本/修订版中未记录但在另一个版本/修订版中记录的 API 很可能存在被拒绝的风险,您的应用支持这两者。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多