我正在尝试在其子视图中从路径对象生成的Uiview中产生剪辑区域。例如,我可能有一个子视图,其中包含一个正方形,另一个包含一个圆。我希望能够在父母监督片中产生一个剪辑,这是这两种形状的结合。有人可以解释如何做吗?关于我到目前为止我能弄清楚的一切是:

1-在其子视图的绘制之前调用Supperiew的绘制:方法是调用的,并且
2-在所有三个实例中均可访问的contextref都是相同的。

除此之外,我很难过。谢谢,
霍华德

有帮助吗?

解决方案

简而言之,您必须迭代所有子视图,并让每个子视图修改当前上下文路径,然后将该路径设置为剪辑路径。您可以从每个视图中要求一条路径或将上下文传递给每个视图。

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState( context );
CGContextBeginPath( context );

for ( view in subviews ) {
  if ( [view respondsToSelector:@selector(pathTranslatedForView:)] ) {
    CGContextAddPath( context , [(MyCustomViewPath *)view pathTranslatedForView:self] );
  }
}

CGContextClip( context );
// do stuff with clipping path
CGContextRestoreGState( context );

编辑:

调用子视图时,您可能需要调整上下文,以便0,0是所谓的视图的来源,而不是主管:

CGRect frame = [view frame];
CGContextTranslateCTM( context , -frame.origin.x , -frame.origin.y );
CGContextAddPath( context , [(MyCustomViewPath *)view path]; 
CGContextTranslateCTM( context , frame.origin.x , frame.origin.y );

其他提示

也许尝试将背景颜色设置为.clear:uiview -Rectangle将消失仅租赁路径形状

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top