-1

我想知道是否有可能/如何编写一个类,以便它可以在 Objective-C 的不同 iOS 版本上运行。例如 VisualEffectView 仅适用于 iOS8 及更高版本。如果 iOS >= 8 是否可以声明 VisualEffectView ,如果不是则可以声明 UIView ?如果是这样,这可以在头文件中完成吗?

我想创建一个警告框,以便在保存完成或发生错误时出现在视图控制器的顶部。根据 iOS 版本,如果使用精美的模糊视图或仅使用平面 UIView 会很好。

4

3 回答 3

1

if声明中,使用NSClassFromString. 您会立即发现 UIVisualEffectView 在返回时不存在nil,因此您可以在它存在时采用一个分支,如果它不存在则采用另一个分支:

if (!NSClassFromString(@"UIVisualEffectView")) {
    // ... use UIView ...
} else {
    // ... use UIViewVisualEffectView ... {
}
于 2015-05-05T16:02:34.453 回答
1

从 iOS 5 开始,您可以使用以下语法。

if ([UIVisualEffectView class]) {
    // Create and use a UIVisualEffectView
}

这有时会咬你,NSMapTable在 iOS 6 之前的 iOS 版本中可用,但在 iOS 6 中仅“正式”可用。当尝试在 iOS 5 中使用它时,会出现一些零星的未记录行为。

于 2015-05-05T16:39:52.823 回答
0

正如许多人所建议的那样,您可以使用该NSClassFromString功能在运行时找出操作系统版本是否具有该类。如果没有(即 iOS 7 设备)并且您仍然想要实时模糊,我会推荐LiveFrost

于 2015-05-05T17:24:13.163 回答