0

私のアプリケーションでは、ボタンのクリックで 5 枚の写真を連続してキャプチャしています。しかし、今回の撮影中に端末のホームボタンを押すと、いつものようにアプリがバックグラウンドに入るのですが、再起動しようとするとアプリがクラッシュしてしまいます。この問題の解決策を教えてください。

前もって感謝します

4

1 に答える 1

2

こんにちは、この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]; }

    • (UIImage *)scaleAndRotateImage:(UIImage *)image { int kMaxResolution = 550; // または何でも

    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 を返します。}

于 2012-09-24T13:18:06.833 に答える