【问题标题】:UIGestureRecognizer in iOS 3.1.3?iOS 3.1.3 中的 UIGestureRecognizer?
【发布时间】:2011-02-26 12:06:10
【问题描述】:

我正在努力使现有的 iPhone/iPad 项目向后兼容到 iPhoneOS 3.0。

我目前的测试设备是 iPod Touch,上面有 3.1.3。

以下代码导致问题:

Class gestureRecognizer = NSClassFromString(@"UISwipeGestureRecognizer");

if (gestureRecognizer != nil)
{

    UISwipeGestureRecognizer * leftSwipeRecognizer = [[UISwipeGestureRecognizer alloc] initWithTarget:self 
                                                                                               action:@selector(didSwipeLeft:)];
    leftSwipeRecognizer.direction = UISwipeGestureRecognizerDirectionLeft;
    leftSwipeRecognizer.delegate = self;
    [self.view addGestureRecognizer:leftSwipeRecognizer];
    _leftSwipeRecognizer = leftSwipeRecognizer;
}

根据 Apple 文档,UIGestureRecognizer 是从 iOS 3.2 开始定义的。所以我希望Class gestureReconizer 在以前的操作系统版本上是nil,如果要跳过以下内容。但是它不会跳过。 gestureRecognizer 不是nilif 中的代码开始执行并在leftSwipeRecognizer.direction 处崩溃,因为:

-[UISwipeGestureRecognizer setDirection:]: unrecognized selector sent to instance 0x1e5720

这种情况相当混乱。我想我什么都照本宣科。我尝试在使用某个类之前检查它是否存在,但是不应该存在的类存在,愚弄了我的测试,不符合其预期规范,并且崩溃了。

当然,我可以在这里和那里放置一些respondsToSelector 检查来解决这个崩溃问题,但这不是一个优雅的方法。

还有其他建议吗?

【问题讨论】:

    标签: ios iphone-sdk-3.0 uigesturerecognizer universal-binary


    【解决方案1】:

    根据 UIGestureRecognizer 类参考,在"Usage Special Considerations" 下,您实际上确实需要在检查类是否存在后进行额外的 respondsToSelector 检查。

    这直接来自文档:

    判断一个类是否 在给定的 iOS 运行时可用 发布,您通常检查是否 课程为零。不幸的是,这 测试不是完全准确的 UIGestureRecognizer。虽然这 课程开始公开 在 iOS 3.2 中,它正在开发中 在此之前的短时间内。虽然 该类存在于较早的 发布、使用等 手势识别器类不是 在该早期版本中支持。你 不应尝试使用 那些类。

    在运行时确定您是否 可以在你的 应用,测试是否类 存在,如果存在,分配一个 实例并查看它是否响应 到选择器 locationInView:。这 方法未添加到类中 直到 iOS 3.2。代码可能看起来 像下面这样:

    UIGestureRecognizer *gestureRecognizer = [[UIGestureRecognizer alloc] 
        initWithTarget:self action:@selector(myAction:)];
    
    if (![gestureRecognizer respondsToSelector:@selector(locationInView:)]) {
        [gestureRecognizer release];
        gestureRecognizer = nil;
    }
    // do something else if gestureRecognizer is nil
    

    【讨论】:

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