检查是否支持UIGraphicsBeginImageContextWithOptions
-
25-09-2019 - |
题
我正在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(...);
}
我希望这可以帮助任何人。
不隶属于 StackOverflow