Проверка, поддерживается ли UIGraphicsBeginImageContextWithOptions - PullRequest
5 голосов
/ 31 августа 2010

Я работаю над приложением для 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:)])

Без успеха.Любая помощь будет оценена.

Ответы [ 3 ]

12 голосов
/ 31 августа 2010

UIGraphicsBeginImageContextWithOptions является функцией C, поэтому вы не можете использовать методы Objective C, такие как -respondsToSelector:, для проверки ее существования.

Вы можете, однако, слабая ссылка инфраструктура UIKit, а затем проверить, имеет ли UIGraphicsBeginImageContextWithOptions значение NULL:

if (UIGraphicsBeginImageContextWithOptions != NULL) {
   UIGraphicsBeginImageContextWithOptions(...);
} else {
   UIGraphicsBeginImageContext(...);
}
1 голос
/ 04 октября 2010

У меня такая же проблема.Вы можете попробовать протестировать версию системы.Кажется, это работает для меня на устройствах, которые я тестировал.

char majorVersion = [[[UIDevice currentDevice] systemVersion] characterAtIndex: 0];
if (majorVersion == '2' || majorVersion == '3')
     UIGraphicsBeginImageContext(...);
else
     UIGraphicsBeginImageContextWithOptions(...);
0 голосов
/ 09 июня 2017

Я знаю, что это старый вопрос, но с новыми версиями Xcode и iOS (выше 9) у меня работает любой из этих методов.

Я всегда проверяю версию системы следующим образом:

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

Надеюсь, это может кому-нибудь помочь.

...