我正在尝试拍摄提示用户添加通行证时显示的视图的快照。
目标是能够从给定的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是空白图像
答案 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
未完全加载。所以我的建议是在延迟一段时间后截屏。
我希望它能奏效。