Ios 视图快照不';不渲染

Ios 视图快照不';不渲染,ios,uiimage,Ios,Uiimage,我正在尝试获取另一个控制器视图的快照,以便在动画中使用。我正在使用以下代码,但我只看到该视图的背景色,并且没有看到其子视图(两个按钮、一个文本视图和一个标签): 我已经记录了所有相关的东西,fpController、imageView、图像,所有这些都记录正确 编辑后:如果切换到当前控制器的视图,它工作正常,因此我认为这与获取不在屏幕上的视图快照有关。那能做到吗 UIGraphicsBeginImageContextWithOptions(fpController.view.bounds.siz

我正在尝试获取另一个控制器视图的快照,以便在动画中使用。我正在使用以下代码,但我只看到该视图的背景色,并且没有看到其子视图(两个按钮、一个文本视图和一个标签):

我已经记录了所有相关的东西,fpController、imageView、图像,所有这些都记录正确

编辑后:如果切换到当前控制器的视图,它工作正常,因此我认为这与获取不在屏幕上的视图快照有关。那能做到吗

UIGraphicsBeginImageContextWithOptions(fpController.view.bounds.size, NO, 0.0);


UIGraphicsBeginImageContextWithOptions(destinationSize, NO, 0.0);
使用这两行代替
UIGraphicsBeginImageContext(fpController.view.bounds.size)

希望对你有帮助

使用这两行代替
UIGraphicsBeginImageContext(fpController.view.bounds.size)


希望它能帮助你

希望它能帮助你:

 CGSize textcontent =CGSizeMake(width, height);
UIGraphicsBeginImageContext(textcontent);
if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f)
{
    UIGraphicsBeginImageContextWithOptions(textcontent, YES, 1.0f);
}
else
{
    UIGraphicsBeginImageContext(textcontent);
}
    [image.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;

希望这将帮助您:

 CGSize textcontent =CGSizeMake(width, height);
UIGraphicsBeginImageContext(textcontent);
if ([UIScreen instancesRespondToSelector:@selector(scale)] && [[UIScreen mainScreen] scale] == 2.0f)
{
    UIGraphicsBeginImageContextWithOptions(textcontent, YES, 1.0f);
}
else
{
    UIGraphicsBeginImageContext(textcontent);
}
    [image.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return viewImage;

我找到了一种方法来实现这一点,尽管它看起来像是一个黑客。我将要渲染的视图添加为视图的子视图,进行渲染,然后删除该视图。它从未在屏幕上出现过,所以在视觉上,它很好。我只是想知道是否有更好的办法

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.fpController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPage"];

    [self.view insertSubview:self.fpController.view belowSubview:self.view];

    UIGraphicsBeginImageContext(self.fpController.view.bounds.size);
    [self.fpController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.fpController.view removeFromSuperview];

    self.imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 90, 122)];
    self.imageView2.image = viewImage;
    [self.pageView insertSubview:self.imageView2 belowSubview:self.imageView];
}

我找到了一种方法来实现这一点,尽管它看起来像是一个黑客。我将要渲染的视图添加为视图的子视图,进行渲染,然后删除该视图。它从未在屏幕上出现过,所以在视觉上,它很好。我只是想知道是否有更好的办法

- (void)viewDidAppear:(BOOL)animated {
    [super viewDidAppear:animated];
    self.fpController = [self.storyboard instantiateViewControllerWithIdentifier:@"FirstPage"];

    [self.view insertSubview:self.fpController.view belowSubview:self.view];

    UIGraphicsBeginImageContext(self.fpController.view.bounds.size);
    [self.fpController.view.layer renderInContext:UIGraphicsGetCurrentContext()];
    UIImage *viewImage = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    [self.fpController.view removeFromSuperview];

    self.imageView2 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 90, 122)];
    self.imageView2.image = viewImage;
    [self.pageView insertSubview:self.imageView2 belowSubview:self.imageView];
}

您是否也尝试过在上下文中呈现各个子视图?不,从类似问题的答案来看,我的理解是,这将呈现所有子视图。您也尝试过在上下文中呈现各个子视图吗?不,从类似问题的答案来看,我的理解是,这将使所有子视图都得到相同的结果——只是view.self.imageView2=[[UIImageView alloc]initWithImage:[UIImageImageWithData:UIImagePngPresentation(newImage)]的背景色;再加上这个,我会得到相同的结果——只是view.self.imageView2=[[UIImageView alloc]initWithImage:[UIImageImageWithData:UIImagePNGRepresentation(newImage)]的背景色;再加上这个,tryNo,这不会有帮助--这个问题似乎与我试图渲染的视图在屏幕外的事实有关。不,这不会有帮助--这个问题似乎与我试图渲染的视图在屏幕外的事实有关。你能编写与fpController返回图像的函数相同的代码吗?例如-(UIImage*)返回光栅化;然后可以调用[self.imageView2 setImage:[self.fpController returnRasterized];也许少一点“黑客”你能写出与fpController返回图像的函数相同的代码吗?例如-(UIImage*)返回光栅化;然后可以调用[self.imageView2 setImage:[self.fpController returnRasterized];也许少一点“黑客”