Vérifier si UIGraphicsBeginImageContextWithOptions est pris en charge
-
25-09-2019 - |
Question
Je travaille sur une application iOS. Il ne fonctionne actuellement que sur iOS 4 depuis que j'utilise la méthode suivante à plusieurs reprises: « UIGraphicsBeginImageContextWithOptions ». Cette méthode est uniquement disponible dans iOS 4 et celui-ci se bloque mon application actuellement / ne fonctionne pas sur iPhone OS 3. En dehors de cette méthode, il n'y a aucune raison pour laquelle l'application ne devrait pas fonctionner sur l'iPhone OS 3. Comment puis-je faire un chèque voir si oui ou non cette méthode est disponible? Je l'ai essayé ce qui suit sans succès:
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions)]) {
UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0.0); // this will crop
}
else
{
UIGraphicsBeginImageContext(targetSize);
}
Je n'ai essayé variations comme ceci:
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:size:opaque:scale:)])
et
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:)])
Sans succès. Toute aide serait appréciée.
La solution
UIGraphicsBeginImageContextWithOptions est une fonction C, de sorte que vous ne pouvez pas utiliser des méthodes Objective-C comme -respondsToSelector:
pour tester son existence.
Vous pouvez, cependant, maillon faible le cadre UIKit, puis vérifier si UIGraphicsBeginImageContextWithOptions est NULL:
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(...);
} else {
UIGraphicsBeginImageContext(...);
}
Autres conseils
J'ai le même problème. Vous pouvez essayer de tester la version du système. Cela semble fonctionner pour moi sur les appareils que j'ai testé.
char majorVersion = [[[UIDevice currentDevice] systemVersion] characterAtIndex: 0]; if (majorVersion == '2' || majorVersion == '3') UIGraphicsBeginImageContext(...); else UIGraphicsBeginImageContextWithOptions(...);
Je sais que c'est une question ancienne, mais avec de nouvelles versions Xcode et iOS (supérieure à 9) une de ces méthodes de travail pour moi.
Je vérifie toujours la version du système de cette façon:
NSString *sysver = [[UIDevice currentDevice] systemVersion];
NSArray *versionNums = [sysver componentsSeparatedByString:@"."];
int majorVersion = [versionNums[0] intValue];
if (majorVersion > 3){
UIGraphicsBeginImageContextWithOptions(...);
}
else{
UIGraphicsBeginImageContext(...);
}
J'espère que cela pourrait aider quelqu'un.