我正在使用贝塞尔曲线在图像视图中绘制任何形状。当触摸结束时,我已经关闭了路径以获得形状。现在我想实现的空白区域是在贝塞尔路径,以便我可以取代它与另一个图像以后。图像的其余部分保持不变。
“替换为另一个图像“我的意思是,我想分配一个新的图像到裁剪部分或黑洞什么的,..其结果将类似于imageView上的贴纸,其中包含用户绘制的路径。
我想要裁剪封闭路径内的内容,以便在为路径指定新图像时,它会调整大小并调整为封闭路径。请不要在新分配的图像中使用蒙版。我将不得不创建一个方法来调整它的框架大小,但这也在bezierpath中。我也附上了预期结果的图像。
背景图像
1st User draws a bezier path
当路径结束时,新图像将被指定给闭合路径,并将确切的帧作为闭合路径。
2nd grass image gets assigned to path and adjusts its frame的
然后,用户可以调整框架的大小。但是草的图像不应该移动到路径之外。
3rd resizable frame of grass image inside path的
我希望我说的有道理。
2条答案
按热度按时间t3psigkw1#
要实现这一点,您可以按照以下步骤操作:
**Bezier路径创建遮罩图:**用户绘制完路径后,可以从Bezier路径创建遮罩图。此遮罩图像将在路径内部具有透明区域,而在外部具有不透明区域。
字符串
**将蒙版应用于原始图像:**将蒙版图像应用于原始图像,以便原始图像的内容位于用户绘制的路径内,其余内容位于路径外。
型
**用另一张图片覆盖结果:**现在,您可以将maskedImage与另一张图片(您的贴纸)覆盖,以实现所需的效果。
型
以下是您可以使用的辅助扩展和方法:
型
tcomlyy62#
我们遗漏了很多关于你最终目标的细节,但这可能会让你走上正轨...
而不是试图“挖一个洞并填满它”,我们可以:
因此,视图层次结构如下所示(草地上没有设置遮罩):
x1c 0d1x的数据
当我们为草层蒙版设置路径时,它看起来像这样:
的
运行时,用户正在绘制:
的
用户停止绘制,我们关闭路径,并将其应用于草视图:
的
示例代码来查看实际操作...
//
FillImageView
class-这将保存“草”图像,并将应用图层蒙版:字符串
//
DrawImageView
class-这将保存“街道”图像,并处理绘制虚线:型
//
DrawMaskView
class-管理DrawImageView
和FillImageView
:型
//简单示例视图控制器-使用名为“street”和“grass”的图像:
型
编辑
如果你想让“填充”图像缩放以适应路径边界,我们可以对上面的类做一些修改……
我们将把“草”图像视图设置为与“街道”图像视图相同的帧,而不是将其帧设置为贝塞尔路径的边界,然后在将其用作遮罩时偏移路径。
//
FillImageView
class-同上//
ScaledDrawImageView
class-大部分与上面相同,但是我们添加了一个“start”闭包,这样我们每次都会启动一个新的路径(而不是添加路径):型
//
ScaledDrawMaskView
class-调整“草”图像视图的帧并转换路径:型
//简单的视图控制器示例-与上面相同,除了我们使用
ScaledDrawMaskView
而不是DrawMaskView
:型
现在,使用此图像作为“草”图像,因此我们可以看到缩放:
x1c4d 1x型
我们得到几种不同路径形状的输出:
型
型
型
型