Search code examples
objective-ccocoa-touchuikitios4retina-display

Checking if UIGraphicsBeginImageContextWithOptions is supported


I'm working on an iOS app. It currently only works on iOS 4 since I use the following method on several occasions: "UIGraphicsBeginImageContextWithOptions". This method is only available in iOS 4 and therefor my app currently crashes/doesn't work on iPhone OS 3. Aside from this method there is no reason why the app should not work on iPhone OS 3. How do I make a check to see wether or not this method is available ? I've tried the following without succes:

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

}

I've only tried variations like this:

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

and

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

Without succes. Any help would be appreciated.


Solution

  • UIGraphicsBeginImageContextWithOptions is a C function, so you can't use Objective-C methods like -respondsToSelector: to test its existence.

    You could, however, weak link the UIKit framework, and then check if UIGraphicsBeginImageContextWithOptions is NULL:

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