1

我正在尝试使用 CGContext 路径绘制命令在 UIImageView 绘图和线条绘图之间混合,但绘制顺序不正确。我需要在图像顶部绘制路径,但反过来。

我实现它的方式:

  1. 在 UIImageView 中设置 UIImage 并将 UIImageView 添加为主视图的子视图。
  2. 接下来我使用'drawRect'(刷新绘制函数)使用UIKit CGContextStrokePath 函数绘制路径。

现在,除了直接使用 Context 图像绘制功能(我想避免这种情况,因为我通过几个 UIImageView 重用我的图像资源),有没有办法正确设置顺序(可能是一个标志集)?

问题再次是在 UIImageViews 之前绘制线条/路径(通过与父 UIView 的连接自动绘制),因此它们在图像/UIImageViews 上不可见。

谢谢

4

2 回答 2

3

最顶层(在本例中为最后添加的)子视图的内容将出现在所有其他视图的前面。如果您添加一个图像子视图并绘制到其父视图中,则该图像将出现在您在该父视图中所做的任何绘图的前面。

只有在添加 UIImageView 之后,您才应该绘制添加到主视图的新视图。

如果需要,您还可以使用bringSubviewToFront:andsendSubviewToBack:手动重新排序视图。

(从您的帖子中,尚不清楚您正在绘制哪个视图,但我假设您正在绘制可以解释这种行为的主要父视图。)

于 2009-06-08T07:43:15.117 回答
3

您可以尝试通过 Quartz Core 使用层来实现这一点(请参阅 CALayer 类文档)。基本上,您可以有层层次​​结构。您将每个 UIView 关联到不同的层,然后将这些层一起呈现,以提供单个复合层。此外,您还可以将变换和动画应用于图层。

您需要导入 QuartzCore 标头并执行类似的操作

#import <QuartzCore/QuartzCore.h>
UIView *mainView = [[UIView alloc] initWithFrame...
UIImageView *imageView = ...

CaLayer *mainViewLayer = mainView.layer;
[mainViewLayer addSubLayer: imageView.layer];

然后,当 mainView 出现在屏幕上时,所有的子层合并在一起并呈现在屏幕上。发生的情况是每个视图呈现其层,而 mainViewLayer 被呈现合并两个层。

让我知道这是否适合您。

您可以拥有任意数量的图层。您可以使用 CALayer 方法创建任意层次结构

– addSublayer: 
– removeFromSuperlayer
– insertSublayer:atIndex:
– insertSublayer:below:
– insertSublayer:above:
– replaceSublayer:with:
于 2009-06-08T13:13:11.753 回答