Iphone 拍摄PKAddPasseViewController的快照';s观点

Iphone 拍摄PKAddPasseViewController的快照';s观点,iphone,ios,objective-c,passbook,Iphone,Ios,Objective C,Passbook,当提示用户添加通行证时,我正在尝试拍摄所显示视图的快照 目标是能够从给定的pkpass生成图像 我希望这样的事情能奏效: NSString *filePath = [[NSBundle mainBundle] pathForResource:@"columbus" ofType:@"pkpass"]; PKPass *pass = [[PKPass alloc] initWithData:[NSData dataWithContentsOfFile:filePath] error:nil];

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

目标是能够从给定的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回调

  • 设置隐藏属性

  • 使用计时器确保截图时在屏幕上可以看到通行证

  • 拍摄父视图的快照

我没有主意了,所以任何建议都很感激 提前谢谢

哦,我在这里上传了一个小项目:

编辑: 我可以拍摄其他视图的快照,也可以加载其他UIImage,只需使用上面的代码即可。
返回的UIImage是一个空白图像

试试这个,这可能适合您

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

捕获图像代码很好。尝试:
[self.view.superview addSubview:imageView]在完成块中,而不是
[self.view addSubview:imageView]

如果对您有效,您可以尝试此代码。给出你想要捕捉的坐标,就这样。它会将您的文件保存在图像相册中。它可能会发出警告,但它是有效的

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

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

谢谢你的建议!不幸的是,我从captureView收到的UIImage是一个空白图像(加载另一个UIImage也可以)。谢谢你,但这不起作用。顺便说一句,我可以拍摄其他视图的快照。谢谢,但viewImage仍然是空白的(这是意料之中的,因为代码是相同的)您如何知道viewImage是空白的?如果您使用给定的代码,它应该将图像保存在相册中。检查它是否正在保存图像,请告诉我。我尝试了它,但它在这个特定的PKAddPasseViewController视图上不起作用。问题出在别的地方!这是我下周与苹果公司讨论的事项之一。PKPassViewController似乎存在一些异常。如果我找到了,或者他们能给我一个解决方案,我会在这里发布。我希望我也没有想到他们是有意的(比如阻止开发人员生成通行证的图片)。我可以想到一些情况下,这可能会带来安全风险,但在一天结束时,我看不到任何理由可以证明故意阻止。尝试过了。在拍摄快照之前,我插入了一个断点,当我到达断点时,pass在其所有glorywhy不尝试在ViewWillAspect方法中的pkaddPasseViewController类中编写快照代码。ViewDidAspect不会被调用。我还注意到,如果应用程序在断点处等待,则pass-view控制器仍在工作,并且响应良好,现在是编写代码的时候了。请与我共享您的代码,以便我也可以与您一起解决此问题。它位于github上,我在问题的最后提到了url!