0

ユーザーがパスを追加するように求められたときに表示されるビューのスナップショットを取得しようとしています。

目標は、特定の pkpass からイメージを生成できるようにすることです

私はこのようなものがうまくいくことを望んでいました:

NSString *filePath = [[NSBundle mainBundle] pathForResource:@"columbus" ofType:@"pkpass"];
PKPass *pass = [[PKPass alloc] initWithData:[NSData dataWithContentsOfFile:filePath] error:nil];

PKAddPassesViewController *pkAddPassesViewController = [[PKAddPassesViewController alloc] initWithPass:pass];
[self presentViewController:pkAddPassesViewController animated:YES completion:^(){
    UIImage *image = [pkAddPassesViewController.view captureView];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];
}];

captureView の場合:

- (UIImage *)captureView
{
    CGRect screenRect = self.bounds;
    UIGraphicsBeginImageContext(self.bounds.size);
    CGContextRef ctx = UIGraphicsGetCurrentContext();
    [[UIColor clearColor] set];
    CGContextFillRect(ctx, screenRect);
    [self.layer renderInContext:ctx];
    UIImage *newImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return newImage;
}

何だと思う?私は間違っていた:

私は試した:

  • 完了コールバックと animationFinished コールバックの使用

  • 隠しプロパティの設定

  • タイマーを使用して、スクリーンショットを撮ったときにパスが画面に表示されていることを確認する

  • 親ビューのスナップショットを撮る

アイデアが足りなくなったので、どんな提案でも大歓迎です よろしくお願いします

ああ、ここに最小限のプロジェクトをアップロードしました: https://github.com/framp/demo-capturing-passbook

編集:私は他のビューのスナップショットを撮ることができ、上記のコードで他の UIImage をうまくロードできます。返される UIImage は空白の画像です

4

4 に答える 4

0

pkAddPassesViewControllerスナップショットを撮ったときに完全にロードされていないと思います。したがって、私の提案は、少し遅れてスクリーンショットを撮ることです。うまくいくことを願っています。

于 2013-06-06T14:54:04.657 に答える
0

キャプチャ画像のコードは良いです。[self.view.superview addSubview:imageView];:の代わりに完了ブロックで試してください[self.view addSubview:imageView];

于 2013-06-06T13:42:49.200 に答える
0

うまくいく場合は、このコードを試すことができます。キャプチャしたい座標を指定すると、それだけです。ファイルを画像アルバムに保存します。警告が表示される場合がありますが、機能します。

 UIGraphicsBeginImageContext(CGSizeMake(320, 380));
 [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
 UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);
于 2013-06-06T14:18:53.663 に答える
0

これを試してください、これはあなたのために働くかもしれません。

UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData=UIImagePNGRepresentation(reportImage);
于 2013-06-06T13:12:38.687 に答える