从其子视图中的路径对象中的uiview中构建剪辑区域
-
28-09-2019 - |
题
我正在尝试在其子视图中从路径对象生成的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将消失仅租赁路径形状
不隶属于 StackOverflow