Verificando se o UIGRAPHICSBEGINIMAGECONTEXTWITHOPTIONS for suportado
-
25-09-2019 - |
Pergunta
Estou trabalhando em um aplicativo iOS. Atualmente, ele funciona apenas no iOS 4, pois eu uso o método a seguir em várias ocasiões: "uigraphicsBeginImageContextWithOptions". Este método está disponível apenas no iOS 4 e, portanto, meu aplicativo trava atualmente/não funciona no iPhone OS 3. Além desse método, não há razão para que o aplicativo não funcione no iPhone OS 3. Como faço para fazer um cheque para Veja se este método está disponível? Eu tentei o seguinte sem sucesso:
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions)]) {
UIGraphicsBeginImageContextWithOptions(targetSize, NO, 0.0); // this will crop
}
else
{
UIGraphicsBeginImageContext(targetSize);
}
Eu só tentei variações como esta:
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:size:opaque:scale:)])
e
if([self respondsToSelector:@selector(UIGraphicsBeginImageContextWithOptions:)])
Sem sucesso. Qualquer ajuda seria apreciada.
Solução
UigraphicsBeginImageContextWithOptions é uma função C, para que você não possa usar métodos Objective-C como -respondsToSelector:
para testar sua existência.
Você poderia, no entanto, elo fraco A estrutura do UIKIT e verifique se o UIGRAPHICSBEGINIMAGECONTEXTWITHOPTIONS é NULL:
if (UIGraphicsBeginImageContextWithOptions != NULL) {
UIGraphicsBeginImageContextWithOptions(...);
} else {
UIGraphicsBeginImageContext(...);
}
Outras dicas
Eu tenho o mesmo problema. Você pode tentar testar a versão do sistema. Isso parece funcionar para mim nos dispositivos que testei.
char majorVersion = [[[UIDevice currentDevice] systemVersion] characterAtIndex: 0]; if (majorVersion == '2' || majorVersion == '3') UIGraphicsBeginImageContext(...); else UIGraphicsBeginImageContextWithOptions(...);
Sei que essa é uma pergunta antiga, mas com novas versões Xcode e iOS (superior a 9), qualquer um desses métodos funciona para mim.
Eu sempre verifico a versão do sistema dessa maneira:
NSString *sysver = [[UIDevice currentDevice] systemVersion];
NSArray *versionNums = [sysver componentsSeparatedByString:@"."];
int majorVersion = [versionNums[0] intValue];
if (majorVersion > 3){
UIGraphicsBeginImageContextWithOptions(...);
}
else{
UIGraphicsBeginImageContext(...);
}
Espero que isso possa ajudar alguém.