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

试试这个,这可能对你有用。

UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData=UIImagePNGRepresentation(reportImage);
于 2013-06-06T13:12:38.687 回答
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

我认为pkAddPassesViewController拍摄快照时没有完全加载。所以我的建议是延迟一段时间后截取屏幕截图。我希望它会奏效。

于 2013-06-06T14:54:04.657 回答