التحقق مما إذا كان uigraphicsbeginimageContextWithOptions مدعوم
-
25-09-2019 - |
سؤال
أنا أعمل على تطبيق iOS. يعمل حاليًا فقط على iOS 4 لأنني أستخدم الطريقة التالية في عدة مناسبات: "UigraphicsBeginImageContextWithOptions". هذه الطريقة متوفرة فقط في iOS 4 ، وبالتالي فإن تطبيقي يتعطل/لا يعمل حاليًا على iPhone OS انظر Wether أم لا هذه الطريقة متاحة؟ لقد جربت ما يلي بدون نجاح:
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 ، لذلك لا يمكنك استخدام أساليب Objective-C مثل -respondsToSelector:
لاختبار وجودها.
يمكنك ، ومع ذلك ، رابط ضعيف إطار UIKIT ، ثم تحقق مما إذا كان uigraphicsbeginimageContextWithOptions لاغية:
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(...);
}
آمل أن يساعد هذا أي شخص.