如何在Core Graphics中“重绘图层”?

时间:2013-01-14 20:54:44

标签: iphone objective-c xcode graphics core-graphics

我记得当我阅读Apple文档时,它会提到当你调用像addSubview这样的函数时,你会添加一层“绘画”,可以这么说,每次都是被叫,另一层被覆盖。

这应该是一个容易回答的问题,但我很难想到google的关键字,所以请原谅这么简单的问题。

如何清除自定义UIView的“图层”?

我的情况,因为它可能是相关的:我有这些“用户卡”显示在屏幕上。它们使用一些用户图像进行初始化。卡片保持不变,但我在自定义UIView(卡片UIView)中调用方法,以便在我想要显示其他用户时重绘图像。问题是这个自定义UIView的一些元素是透明的,每次重绘这些图像都建立在透明度上(这是一个明显的问题)。

2 个答案:

答案 0 :(得分:2)

在Core Graphics中,您绘制的是显示的内容。画家的类比仅指单个框架。因此,如果您使用drawRect,则只是不缓存上一张图。

但我怀疑你在谈论一些你添加了子视图或子图层的UIKit。如果您只想清除所有内容,这将删除剩余的视图:

for (UIView *view in customView) {
    [view removeFromSuperview];
}

for (CALayer *layer in customView.layer) {
    [layer removeFromSuperlayer];
}

答案 1 :(得分:0)

Ryan用于清除UIViews的代码或多或少是正确的,但是如果你是从谷歌来到这里寻找如何从视图中清除CLLayers的话,当我试图快速枚举customView.layer时我就像瑞恩一样崩溃了在他的例子中。

当我将其切换到常规枚举时,它对我有用。这是一段代码:

for (int i = 0; i > yourView.layer.sublayers.count; i++) {
    CALayer *layer = [self.yourView.layer.sublayers objectAtIndex:i];
    [layer removeFromSuperlayer];
}