5

我正在开发一个 iOS 应用程序。它目前仅适用于 iOS 4,因为我多次使用以下方法:“UIGraphicsBeginImageContextWithOptions”。此方法仅在 iOS 4 中可用,因此我的应用程序当前在 iPhone OS 3 上崩溃/无法运行。除了这种方法之外,没有理由让该应用程序在 iPhone OS 3 上无法运行。我该如何检查看看这个方法是否可用?我尝试了以下但没有成功:

if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions)]) {
    UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0.0); // this will crop
}
else 
{
    UIGraphicsBeginImageContext(targetSize);

}

我只尝试过这样的变体:

if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:size:opaque:scale:)])

if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:)])

没有成功。任何帮助,将不胜感激。

4

3 回答 3

12

UIGraphicsBeginImageContextWithOptions 是一个 C 函数,所以你不能使用 Objective-C 的方法-respondsToSelector:来测试它的存在。

但是,您可以弱链接UIKit 框架,然后检查 UIGraphicsBeginImageContextWithOptions 是否为 NULL:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
   UIGraphicsBeginImageContextWithOptions(...);
} else {
   UIGraphicsBeginImageContext(...);
}
于 2010-08-31T08:00:10.733 回答
1

我也有同样的问题。您可以尝试测试系统版本。这在我测试的设备上似乎对我有用。

char majorVersion = [[[UIDevice currentDevice] systemVersion] characterAtIndex: 0];
if (majorVersion == '2' || majorVersion == '3')
     UIGraphicsBeginImageContext(...);
别的
     UIGraphicsBeginImageContextWithOptions(...);
于 2010-10-04T16:11:47.837 回答
0

我知道这是一个老问题,但是对于新的 Xcode 和 iOS 版本(高于 9),这些方法中的任何一个都对我有用。

我总是这样检查系统版本:

NSString *sysver = [[UIDevice currentDevice] systemVersion];
NSArray *versionNums = [sysver componentsSeparatedByString:@"."];
int majorVersion = [versionNums[0] intValue];
if (majorVersion > 3){
    UIGraphicsBeginImageContextWithOptions(...);
}
else{
    UIGraphicsBeginImageContext(...);
}

我希望这可以帮助任何人。

于 2017-06-09T13:10:55.200 回答