私のアプリケーションでは、ボタンのクリックで 5 枚の写真を連続してキャプチャしています。しかし、今回の撮影中に端末のホームボタンを押すと、いつものようにアプリがバックグラウンドに入るのですが、再起動しようとするとアプリがクラッシュしてしまいます。この問題の解決策を教えてください。
前もって感謝します
私のアプリケーションでは、ボタンのクリックで 5 枚の写真を連続してキャプチャしています。しかし、今回の撮影中に端末のホームボタンを押すと、いつものようにアプリがバックグラウンドに入るのですが、再起動しようとするとアプリがクラッシュしてしまいます。この問題の解決策を教えてください。
前もって感謝します
こんにちは、この3つの方法を参照してください。これにより、メモリリークの問題が解決される可能性があります。実際にクラッシュするのはメモリリークが原因です.高解像度でより多くの写真を撮り、それをアプリケーションで使用している場合、iPhoneはより多くのメモリ。
コードをフォーマットする方法がわからないので、もう1つ申し訳ありません。
(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [picker disconnectModalViewControllerAnimated:YES]; [ピッカーリリース];
[ポップオーバー却下PopoverAnimated:YES]; [ポップオーバーリリース];
UIImage *capturedImage = [info objectForKey:@"UIImagePickerControllerOriginalImage"]; [self performSelector:@selector(waitUntilImageCaptured:) withObject:capturedImage afterDelay:0.2]; }
-(void)waitUntilImageCaptured:(UIImage *)originalImage {
UIImage *tempimg;
tempimg = [self scaleAndRotateImage:originalImage];
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
NSString *imagePath = [[appDelegate applicationDocumentDirectoryString] stringByAppendingPathComponent:@"ClientTempthumb.png"];
//UIImageView *tempView = [[UIImageView alloc] initWithImage:tempimg]; NSData *data = [NSData dataWithData:UIImagePNGRepresentation(tempimg)];
if(data != nil) { [data writeToFile:imagePath アトミック:YES]; } else { [[NSFileManager defaultManager] removeItemAtPath:imagePath エラー:NULL]; }
[btnPhoto setImage:tempimg forState:UIControlStateNormal]; [プール解放]; // [appDelegate hideLoadingView]; }
CGImageRef imgRef = image.CGImage;
CGFloat 幅 = CGImageGetWidth(imgRef); CGFloat の高さ = CGImageGetHeight(imgRef);
CGAffineTransform 変換 = CGAffineTransformIdentity; CGRect 境界 = CGRectMake(0, 0, 幅, 高さ); if (幅 > kMaxResolution || 高さ > kMaxResolution) { CGFloat 比率 = 幅/高さ;
if (ratio > 1)
{
bounds.size.width = kMaxResolution;
bounds.size.height = roundf(bounds.size.width / ratio);
}
else
{
bounds.size.height = kMaxResolution;
bounds.size.width = roundf(bounds.size.height * ratio);
}
}
CGFloat scaleRatio = bounds.size.width / width; CGSize imageSize = CGSizeMake(CGImageGetWidth(imgRef), CGImageGetHeight(imgRef)); CGFloatboundHeight; UIImageOrientation orient = image.imageOrientation;
スイッチ(オリエント) {
case UIImageOrientationUp: //EXIF = 1
// landscape right
transform = CGAffineTransformIdentity;
break;
case UIImageOrientationUpMirrored: //EXIF = 2
transform = CGAffineTransformMakeTranslation(imageSize.width, 0.0);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
break;
case UIImageOrientationDown: //EXIF = 3
// landscape left
transform = CGAffineTransformMakeTranslation(imageSize.width, imageSize.height);
transform = CGAffineTransformRotate(transform, M_PI);
break;
case UIImageOrientationDownMirrored: //EXIF = 4
transform = CGAffineTransformMakeTranslation(0.0, imageSize.height);
transform = CGAffineTransformScale(transform, 1.0, -1.0);
break;
case UIImageOrientationLeftMirrored: //EXIF = 5
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, imageSize.width);
transform = CGAffineTransformScale(transform, -1.0, 1.0);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationLeft: //EXIF = 6
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(0.0, imageSize.width);
transform = CGAffineTransformRotate(transform, 3.0 * M_PI / 2.0);
break;
case UIImageOrientationRightMirrored: //EXIF = 7
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeScale(-1.0, 1.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
case UIImageOrientationRight: //EXIF = 8
// Portrait Mode
boundHeight = bounds.size.height;
bounds.size.height = bounds.size.width;
bounds.size.width = boundHeight;
transform = CGAffineTransformMakeTranslation(imageSize.height, 0.0);
transform = CGAffineTransformRotate(transform, M_PI / 2.0);
break;
default:
[NSException raise:NSInternalInconsistencyException format:@"Invalid image orientation"];
}
UIGraphicsBeginImageContext(bounds.size);
CGContextRef コンテキスト = UIGraphicsGetCurrentContext();
if (orient == UIImageOrientationRight || orient == UIImageOrientationLeft) { CGContextScaleCTM(context, -scaleRatio, scaleRatio); CGContextTranslateCTM(コンテキスト、高さ、0); } else { CGContextScaleCTM(context, scaleRatio, -scaleRatio); CGContextTranslateCTM(コンテキスト、0、-高さ); }
CGContextConcatCTM(コンテキスト、変換);
CGContextDrawImage(UIGraphicsGetCurrentContext(), CGRectMake(0, 0, 幅, 高さ), imgRef); UIImage *imageCopy = UIGraphicsGetImageFromCurrentImageContext(); UIGraphicsEndImageContext();
imageCopy を返します。}