10

我正在为 iPhone 创建一个自定义开/关切换开​​关(类似于标准开关),我正处于设置滑块蒙版的[[myView layer] setMask:maskLayer]位置,但调用设置蒙版层的相对位置它被遮罩的层,而不是相对于遮罩层的容器层。对于这个特定的场景,遮罩层的位置需要相对于它的包含层进行设置,因为切换滑块将在遮罩下方移动并且遮罩应该保持静止。

无需对蒙版和切换滑块组件进行动画处理即可达到所需的效果,有人知道如何进行这项工作吗?这是我到目前为止所得到的:

CAShapeLayer *maskLayer = [[CAShapeLayer alloc] init];
CGMutablePathRef path = CGPathCreateMutable();

CGPathAddEllipseInRect(path, nil, CGRectMake(0, 0, 13, 13));
CGPathAddEllipseInRect(path, nil, CGRectMake(30, 0, 13, 13));
CGPathAddRect(path, nil, CGRectMake(6, 0, 32, 13));

[maskLayer setPath:path];
[maskLayer setFillColor:[[UIColor greenColor] CGColor]];

[[self layer] addSublayer:maskLayer];

[maskLayer setPosition:CGPointMake(2, 2)];

[self addSubview:toggleView];

[[toggleView layer] setMask:maskLayer];
4

1 回答 1

14

蒙版只是一种特殊的子图层,因此蒙版的超图层将始终是它所遮盖的图层。没有其他办法了。此外,您在文档中违反了此警告:

将遮罩设置为新图层时,必须先将新图层的超图层设置为 nil,否则行为未定义。

您应该删除该[[self layer] addSublayer:maskLayer];行。

为了解决您的问题,我将创建另一个图层或视图,其中包含您的 toggleView 上的所有内容,然后将该图层作为子图层添加到您的 toggleLayer。这样,您可以独立于蒙版定位新子图层,如果您移动父图层,蒙版和子图层将一起移动(如果我理解正确,他们应该这样做)。

于 2010-02-15T22:13:45.657 回答