拍摄PKAddPassesViewController视图的快照

时间:2013-06-06 13:04:57

标签: iphone ios objective-c passbook

我正在尝试拍摄提示用户添加通行证时显示的视图的快照。

目标是能够从给定的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 个答案:

答案 0 :(得分:0)

试试这个,这可能适合你。

UIGraphicsBeginImageContext(self.view.frame.size);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIImage *newImage=UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
NSData *imageData=UIImagePNGRepresentation(reportImage);

答案 1 :(得分:0)

捕获图像代码很好。尝试使用完成块中的[self.view.superview addSubview:imageView];代替[self.view addSubview:imageView];

答案 2 :(得分:0)

如果适合您,可以尝试使用此代码。给你想要捕获的坐标,然后给它。它会将您的文件保存在图像相册中。它可能会发出警告,但它有效。

 UIGraphicsBeginImageContext(CGSizeMake(320, 380));
 [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
 UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();
 UIImageWriteToSavedPhotosAlbum(viewImage, nil, nil, nil);

答案 3 :(得分:0)

我认为拍摄快照时pkAddPassesViewController未完全加载。所以我的建议是在延迟一段时间后截屏。 我希望它能奏效。