我正在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:)])

无更迭。任何帮助,将不胜感激。

有帮助吗?

解决方案

UIGraphicsBeginImageContextWithOptions是C的功能,所以不能使用像-respondsToSelector: Objective-C的方法,以测试它的存在。

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

if (UIGraphicsBeginImageContextWithOptions != NULL) {
   UIGraphicsBeginImageContextWithOptions(...);
} else {
   UIGraphicsBeginImageContext(...);
}

其他提示

我有同样的问题。你可以尝试测试系统的版本。这似乎为我工作,我测试的设备上。

char majorVersion = [[[UIDevice currentDevice] systemVersion] characterAtIndex: 0];
if (majorVersion == '2' || majorVersion == '3')
     UIGraphicsBeginImageContext(...);
else
     UIGraphicsBeginImageContextWithOptions(...);

我知道这是一个老问题,但随着新的Xcode和iOS版本(上比9)任何这种方法的工作对我来说。

我总是检查系统版本以这种方式:

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top