gpt4 book ai didi

ios - 使用贝塞尔路径作为剪贴蒙版

转载 作者:IT王子 更新时间:2023-10-29 08:02:15 26 4
gpt4 key购买 nike

我想知道是否可以将 View 裁剪到贝塞尔路径。我的意思是我希望只能在封闭的贝塞尔路径内的区域内看到 View 。这样做的原因是我有一个不规则形状的轮廓,我想从上到下用纯色逐渐填充形状。如果我能让某个 View 仅在路径中可见,那么我可以简单地创建一个我想要的颜色的 UIView,然后根据需要更改其框架的 y 坐标,从而有效地填充形状。如果有人对如何实现这一点有更好的想法,我们将不胜感激。为了记录形状的填充将匹配用户手指的 y 值,所以它不能是一个连续的动画。谢谢。

更新(很久以后):

我试过你的答案,Rob,除了一件事,它工作得很好。我的意图是移动被 mask 的 View ,同时 mask 保持在屏幕上的同一位置。这样我就可以给人一种面具被 View “填满”的印象。问题是,使用我根据您的回答编写的代码,当我移动 View 时, mask 会随之移动。我知道这是可以预料的,因为我所做的只是将它添加为 View 的掩码,因此如果它绑定(bind)到的东西移动,它就会移动。我尝试将 mask 添加为 superview 的子层,以使其保持不变,但结果非常奇怪。这是我的代码:

self.test = [[UIView alloc] initWithFrame:CGRectMake(0, 0, 200, 200)];
self.test.backgroundColor = [UIColor greenColor];

[self.view addSubview:self.test];

UIBezierPath *myClippingPath = [UIBezierPath bezierPath];
[myClippingPath moveToPoint:CGPointMake(100, 100)];
[myClippingPath addCurveToPoint:CGPointMake(200, 200) controlPoint1:CGPointMake(self.screenWidth, 0) controlPoint2:CGPointMake(self.screenWidth, 50)];
[myClippingPath closePath];


CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = myClippingPath.CGPath;

self.test.layer.mask = mask;

CGRect firstFrame = self.test.frame;
firstFrame.origin.x += 100;
[UIView animateWithDuration:3 animations:^{
self.test.frame = firstFrame;
}];

已经感谢您的帮助。

最佳答案

您可以通过将 View 的图层蒙版设置为 CAShapeLayer 轻松地做到这一点。

UIBezierPath *myClippingPath = ...

CAShapeLayer *mask = [CAShapeLayer layer];
mask.path = myClippingPath.CGPath;

myView.layer.mask = mask;

如果您还没有将 QuartzCore 框架添加到您的目标中,则需要将其添加到您的目标中。


在 swift ...

let yourCarefullyDrawnPath = UIBezierPath( .. blah blah
let maskForYourPath = CAShapeLayer()
maskForYourPath.path = carefullyRoundedBox.CGPath
layer.mask = maskForYourPath

关于ios - 使用贝塞尔路径作为剪贴蒙版,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20410146/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com