iOS5 では例外をスローするが、6 および 7 では機能する一部の画像スケーリング コードに問題があります。
5 を実行しているユーザーをサポートする必要があるため、例外が発生したときに特別な iOS5 コードを呼び出す try-catch をコーディングしようとしています。
例外 (EXC_BAD_ACCESS) は Apple コードで発生しているようで、私のコードの例外ハンドラーはエラーを処理しませんが、アプリはすぐにクラッシュします。
それで、誰かが例外をキャッチしようとするより堅牢な方法を提案できますか、または画像をスケーリングするより良い方法に光を当てることができますか? (これはiOS5用であることを思い出してください)
私の主な画像スケーリング機能(機能しない例外キャッチャーを含む):
+ (UIImage *)imageWithImage:(UIImage *)image scaledToMax:(int)maxDimension {
// Get a copy of the image where the new image has a maximum height or width as specified by maxDimension
float scaleFactor;
if (image.size.width<=maxDimension && image.size.height<=maxDimension)
{
return image;
}
if (image.size.width>image.size.height)
{
scaleFactor = maxDimension / image.size.width;
} else {
scaleFactor = maxDimension / image.size.height;
}
float newWidth = roundf(image.size.width * scaleFactor);
float newHeight = roundf(image.size.height * scaleFactor);
CGSize newSize = CGSizeMake(newWidth, newHeight);
UIGraphicsBeginImageContextWithOptions(newSize, NO, 0.0);
NSLog(@"HPSImageHelper imageWithImage point a %f %f", newSize.width, newSize.height);
UIImage *newImage;
@try {
[image drawInRect:CGRectMake(0, 0, newSize.width, newSize.height)];
NSLog(@"HPSImageHelper imageWithImage point b");
newImage = UIGraphicsGetImageFromCurrentImageContext();
NSLog(@"HPSImageHelper imageWithImage point c");
UIGraphicsEndImageContext();
}
@catch (NSException * e) {
NSLog(@"HPSImageHelper imageWithImage point d");
newImage = [image scaleToSize:newSize];
NSLog(@"HPSImageHelper imageWithImage point e");
}
NSLog(@"HPSImageHelper imageWithImage point f");
return newImage;
}