【问题标题】:How do I force a UIImageView and its subviews to redraw in a new context?如何强制 UIImageView 及其子视图在新上下文中重绘?
【发布时间】:2010-02-27 15:09:39
【问题描述】:

kSBCanvas 是一个 SBCanvas,它是 UIImageView 的子类。它有几个 UIImageView 子视图。这一切都很好地呈现在 iPhone 屏幕上。

我需要将 kSBCanvas 及其子视图合成到我想要写入磁盘的图像视图中。

我执行以下操作:

 UIGraphicsBeginImageContext(kSBCanvas.bounds.size);
 [kSBCanvas drawRect: [kSBCanvas bounds]];

 UIImage *theImage=UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

然后获取 PNG 表示并将其写入磁盘。

kSBCanvas 渲染,但不渲染子视图图像。我查了一下,kBCanvas 有子视图。我必须在子视图上显式调用 drawRect 吗?很简单,但似乎不对。

【问题讨论】:

    标签: iphone graphics uiimageview


    【解决方案1】:

    试试这个:

    UIGraphicsBeginImageContext(kSBCanvas.bounds.size);
    {
        [kSBCanvas.layer renderInContext: UIGraphicsGetCurrentContext()];
        UIImage *theImage = UIGraphicsGetImageFromCurrentImageContext();
    }
    UIGraphicsEndImageContext();
    

    渲染层也应该渲染所有的子视图。

    【讨论】:

    • 似乎是对的,但编译器说“没有找到'renderInContext:'方法?kSBCanvas 绝对是一个对象,它是 UIImageView 的子类。我知道这很简单。发生了什么?另外,我可以' t 使用 theImage 如果它是如上所示的支架。没什么大不了的。
    • 您需要#include <QuartzCore/QuartzCore.h>
    • 去掉括号即可。这是我自己的怪异风格。
    • 太棒了。非常感谢。必须添加标题令人困惑,但解决方案正是我所需要的。
    猜你喜欢
    • 1970-01-01
    • 2015-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多