【问题标题】:masking UIView based on CGRect基于CGRect屏蔽UIView
【发布时间】:2011-11-06 16:53:54
【问题描述】:

请看图片:

我有 UIView 和 CGRect。我必须检查 CGRect 覆盖 UIView 的位置,然后在与交叉点“相对”的区域上设置掩码。所以它是图像中的蓝色部分。如何做到这一点? 我知道有 CGContextClipToMask 但我不知道如何使用它 - 有人可以帮助我提供示例代码吗? CGContextClipToMask 是好的方向吗?

谢谢!

【问题讨论】:

    标签: cocoa-touch uiview uikit core-graphics quartz-2d


    【解决方案1】:

    您可以将遮罩层分配给您的 UIView 层。

    CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
    view.layer.mask = maskLayer;
    
    CGPathRef path = CGPathCreateMutable();
    // Construct path and set it.
    [maskLayer setPath:path];
    CGPathRelease(path);
    
    [maskLayer release];
    

    文档:CALayer reference

    【讨论】:

    • 是的,谢谢。但是您知道如何“计算”这条路径吗?看来我必须考虑所有情况(14)并且每次都逐点设置......
    • 我应该将 fillColor 设置为 maskLayer(路径?)?因为我有通过点的线条,但它不起作用......非常感谢,Evgeniy!
    • 你想隐藏交叉区域还是只显示它?如果要隐藏它,只需将不透明视图放在蓝色视图上方。如果你想展示它,那么我的代码可以正常工作。将填充颜色设置为不透明,将背景颜色设置为 100% 透明。您可以使用CGRectIntersection 函数计算交集。
    • 是的,但是黄色是 uiwebview,红色是黄色的弹出窗口。所以正确的解决方案是在黄色和交叉路口设置蒙版,并将蓝色设置为背景。
    猜你喜欢
    • 2011-10-11
    • 2011-07-24
    • 2011-03-04
    • 2019-04-14
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 2015-03-26
    • 1970-01-01
    相关资源
    最近更新 更多