给定一个CGPath,如何让它弯曲?

2024-02-04

在下面的屏幕截图中:

当您拖动单词气球的尾部(从气球连接到人的嘴的东西)时,形状会弯曲(如图中两个气球尾部之间的差异所示)。我想知道,这是怎么做到的?我假设您需要从 CGPath 开始并对它做一些事情,有人知道这是什么吗?

更新:所以如果我想弯曲以下形状:

我会使用以下代码吗:

CGPathAddCurveToPoint(mutablePath, NULL, x1, y1, x2, y2 + constant, x5, y5);
CGPathAddCurveToPoint(mutablePath, NULL, x3, y3, x4, y4 + constant, x5, y5);

常数在哪里重新调整点 2 和点 4 的 y 位置来制作曲线?


您需要利用这样一个事实:从数学上讲,直线段只是曲线段的一种。

(这比听起来容易,相信我。)

贝塞尔曲线路径段有一种称为“顺序”的东西,它本质上决定了该段中有多少个点,而不是计算您来自的点。

  • 直线段是一阶曲线,这意味着它只有终点。这些“曲线”始终是直线,因为没有可以弯曲的控制点。
  • 二次曲线是二阶曲线(一个控制点加上目的地)。
  • 三次曲线是三阶曲线(两个控制点)。
  • (数学对此没有任何限制,但 Quartz 到此为止。如果不滚动自己的光栅器,就没有四阶曲线。)

这很重要,因为任何低阶曲线(包括直线)都可以表示为高阶曲线.

那么,秘密是什么呢?

即使是笔直的尾巴,使用曲线.

(即三次曲线,因为您希望曲线沿两个不同的方向移动:一个方向或多或少进入气球尾部,另一个方向或多或少沿着气球的边缘。)

从尾部底部的两个点中的每一个,您希望其中一个控制点位于到达目的地的大约一半处。这一点是无条件的。

The 方向每个控制点为您提供三个选项:

笔直的尾巴

注意图像垂直中心沿蓝线的两个控制点。

注意这两个控制点相对于其连接的基点的方向。它们向内倾斜,朝向尖端——实际上,正好在通往尖端的直线上。

斜尾

这里,尖端点不再水平地位于两个基点之间。控制点已移动,但只是跟随移动:每个控制点仍位于相应基点和尖端之间直线的中间位置。

弯曲的尾巴

对于弯曲的尾巴,您可以移动尖端,但你将控制点保持在与直尾相同的位置。因此,尾部一开始是笔直的(跟随控制点),但随着它距离基点越来越远,它们的影响减弱,尾部开始向尖端弯曲。

这比用代码进行视觉描述要容易得多,因此您可能需要考虑使用 PaintCode 或 Opacity 之类的工具来使用钢笔工具绘制每种尾巴,然后查看它们为其生成的代码是什么样的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

给定一个CGPath,如何让它弯曲? 的相关文章

  • 如何使用群组在 iPhone 和 Apple Watch 之间共享数据?

    我是 Watchkit 开发新手 无法找到在 iPhone 和 iWatch 之间共享数据的解决方案 请帮助我 我希望使用组来共享数据 我们可以使用组在 iPhone 和 iWatch 之间传递数据 基本上iWatch不能做任何处理 我们需
  • SKScene和SKView的paused属性之间的区别

    我使用以下代码暂停 SKScene self paused YES 然而 根据这个answer https stackoverflow com a 21593852 2043580 by 安德烈 戈尔杰耶夫 https stackoverf
  • UILongPressGestureRecognizer 不起作用,但将其替换为 UITapGestureRecognizer 效果很好。为什么?

    我有一个UIImageView with a UILongPressGestureRecognizer无论我如何配置手势识别器 似乎都不会检测到长按手势 但是 如果我把它换成UITapGestureRecognizer that工作得很好
  • 在 UITableViewCell 内动态更改标签宽度

    我正在尝试建立一个自定义表格视图 正如您在图片中看到的 我在故事板一侧将标签的宽度默认设置为 160 磅 并在加载表格时动态更改宽度 我通过修改 cellForRowAtIndexPath 委托方法来实现此目的 因此 根据日期的长度 我设置
  • 如何在 iOS 上更改设备音量 - 而不是音乐音量

    我想更改 iOS iPhone 上的设备音量 我知道我可以使用以下几行更改音乐库的音量 implement at first MediaPlayer framework MPMusicPlayerController musicPlayer
  • Objective C 宏附加到字符串

    我认为这是一件非常简单的事情 但由于我是 iOS 开发和 Objective C 的新手 所以我无法弄清楚 define RESTFUL PATH PREFIX https gogch com gch restful define LOGI
  • 如何使用呼叫目录扩展来识别应用程序中的来电?

    我正在研究callKit框架 我发现通过使用呼叫目录扩展 我们可以识别来电电话号码 我的问题是如何在 iOS 应用程序中实现呼叫目录扩展来识别来电详细信息 我在 Objective C 工作 让一个数 919876xxxxx 使用此方法添加
  • 如何在 iPad 应用程序上禁用横向方向?

    我创建了一个全新的单视图 iOS 通用 Swift 应用程序 然后 我在应用程序设置中取消选中 横向左 和 横向右 我在 iPhone 上运行了它 万岁 无论我如何旋转手机 它都会保持纵向模式 然后我在 iPad 上运行它 它会旋转到任何内
  • 如何让位置音频在 SceneKit 中工作?

    我在使位置音频在 SceneKit 中工作时遇到问题 从 Xcode 生成的 SceneKit 游戏模板开始 我将以下代码添加到handleTap 方法的末尾 let ship scnView scene rootNode childNod
  • 使用基于 Cookie 的身份验证的 Capacitor iOS

    我正在使用 Capacitor v3 NextJS 静态导出和 Django 后端基于生产网站构建 iOS 应用程序 当前的后端身份验证方案通过 cookie 使用 Django 会话 并通过 cookie 设置 CSRF 令牌 应用程序可
  • 在后台运行 URL 请求

    我想在一定的时间间隔内发出 url 请求 例如 每 10 分钟应用程序应该发出一次 url 调用并获取一些 json 数据 应用程序在后台运行时应该能够执行此操作 这可以做到吗 如果是这样 这是否违反 Apple 服务条款 有什么限制吗 i
  • UIImageWriteToSavedPhotosAlbum 选择器语法问题

    努力让 UIImageWriteToSavedPhotosAlbum 快速工作https developer apple com library ios documentation UIKit Reference UIKitFunction
  • Xcode 服务器 ibtool 构建失败

    我一直在研究使用 Xcode Server 进行 CI 我已经解决了一些问题 但现在有一个问题困扰着我 构建似乎工作正常 但在测试阶段挂起 并在日志底部生成以下内容 2015 11 25 14 44 45 650 xcodebuild 58
  • 使用 UIWebView 显示 PDF 不起作用

    因此 我意识到有关使用 UIWebView 在应用程序 在 iPad 上 中显示 PDF 存在很多问题 我已经审查了我能找到的所有内容 但似乎找不到任何满意的东西 我想做的事情非常基本 所以我真的不知道为什么它不起作用 我需要做的就是在 U
  • 如何在 iOS 6 中强制 UIViewController 为纵向

    As the ShouldAutorotateToInterfaceOrientation在 iOS 6 中已弃用 我用它来强制特定视图仅肖像 在 iOS 6 中执行此操作的正确方法是什么 这仅适用于我的应用程序的一个区域 所有其他视图都可
  • 应用程序仅启用纵向,但 UIImagePickerController 在 iOS6 中旋转

    请注意 下面的答案 不适用于 iOS6 所以我仍然需要答案 我的应用程序仅启用纵向模式 但是 如果我将 UIImagePickerController 作为子视图嵌入其中 并旋转设备 则顶部和底部栏将保持在同一位置 但 UIImagePic
  • 播放循环声音的最简单方法是什么?

    在 iPhone 应用程序中播放循环声音的最简单方法是什么 可能最简单的解决方案是使用AVA音频播放器 http developer apple com library ios DOCUMENTATION AVFoundation Refe
  • 如何在没有 MFMessageComposeViewController 的情况下发送和接收短信?

    我想发送和接收短信而不显示MFMessageViewController从我的申请中 有人能告诉我这怎么可能吗 不可能 除非您使用第 3 方 api 发送 接收短信
  • 如何从地址簿中获取一个人的电话号码?

    我想做的就是让用户从地址簿中选择一个号码 我在这个问题中找到了代码 如何从地址簿联系人获取电话号码 iphone sdk https stackoverflow com questions 286207 how to get a phone
  • 构建 iOS 应用程序后退出代码 1 错误

    我正在尝试使用 RestKit 构建我的项目 当我构建它时 我收到以下错误 我尝试使用 Apple LLVM 3 0 和 LLVM GCC 4 2 进行编译 两者都产生相同的结果 任何人有任何想法是什么导致了这个问题 Ld Users Ji

随机推荐

  • 无法更改 Android 中的导航抽屉图标颜色

    好吧 我知道这是一个微不足道的问题 但由于某种原因它对我不起作用 我已经做了很多其他答案中建议的事情 但都是徒劳的 我的可绘制文件夹有白色图标 我什至尝试从 styles xml 更改它 但这也不起作用 我正在我的棒棒糖设备上测试它 任何帮
  • 使用 `` 或 `@import` 包含 CSS - 哪个更好?

    我有一个网站 并且有多个用于打印 电视 屏幕 手持设备等的 css 样式表 我想知道这些方法中哪一种更好用 性能 可用 性等 or
  • 正则表达式问题组名称重新定义?

    所以我有这个正则表达式 s P
  • 线串长度(以英里为单位)

    我将运行数据表示为 Shapely LineStrings 其中 LineString 中的每个点都是一个坐标 我试图计算出以英里为单位的 LineString 长度 我知道 LineString 有一个length方法 但我不知道结果是什
  • 从 Spring Boot jar 文件运行非主类

    我有一个 spring boot jar 文件 里面有一个清单文件 如下所示 Manifest Version 1 0 Implementation Title myApp Implementation Version 0 1 Built
  • delphi中如何分割字符串

    我只需要分割一个字符串 例如 STANS Payment chk 1 1210 000进入一个基于数组 字符串列表中的结果将是 STANS Payment chk 1 1210 000 创建一个TStringList并将逗号分隔的字符串分配
  • 从订单示例构建订单簿[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找从订单构造订单簿的代码 例如 如果订单是 side price quantity buy 100 1 buy 101 10 buy
  • gcc中有128位整数吗?

    我想要一个 128 位整数 因为我想存储两个 64 位数字相乘的结果 gcc 4 4及以上版本有这样的东西吗 对于 C23 之前的 GCC 原始 128 位整数类型是仅在 64 位目标上可用 因此即使您已经检测到最新的 GCC 版本 您也需
  • 在事件处理程序中调用自定义挂钩

    我有一个名为的自定义钩子useFetchMyApi将 fetch 调用包装到 API 端点 函数钩子接受一个参数 并将其包含在帖子正文中 数据数组输出取决于钩子参数 在UI上 App组件调用useFetchMyApi一次 按钮单击处理程序将
  • 包含相同对象列表的对象的实体框架映射

    目前在我的代码中我正在做这样的事情 public class Subject private List
  • FLOPS 什么是真正的 FLOPS

    我来自这个线程 FLOPS Intel 核心并使用 C 语言对其进行测试 内积 https stackoverflow com questions 1536867 flops intel core and testing it with c
  • 将多个 div 与父级底部对齐

    我想将父级底部的 3 个 div 与100 height I tried parent height 100 display table cell vertical align bottom 但不起作用 即使您更改窗口的大小或分辨率 它也应
  • Android Studio Canary 2020.3.1:Kotlin 未解析的引用

    将 Android Studio Canary 版本更新到 3 1 后 我开始收到属于 kotlin 标准库的函数的 Kotlin 未解析引用 并且该问题似乎也影响了 Android Studio 导入正确库的能力 我相信我的问题类似于th
  • 为什么 null 不 in(1,2,3) false [重复]

    这个问题在这里已经有答案了 是否期望当我测试空值时not在列表中 结果始终为 false 那是 select Hello world where null not in 1 2 3 不要选择任何内容 因为 null not in 1 2 3
  • pycrypto 和 Google 应用引擎

    如何将 pycrypto 与 GAP 结合使用 It says here https developers google com appengine docs python tools libraries它不支持最新版本 这是否意味着我必须
  • 如何将值从子功能组件传递到父类组件?

    我有一个父类组件和一个子功能组件 我们如何将值从这种类型的子组件传递到父组件 我见过一些将值从子类组件传递到父类组件的示例 父组件 import React from react import ChildComponent from Chi
  • Heroku 上的 Resque 后台作业

    我在 Heroku 上遇到了一个非常奇怪的问题 我已经花了一段时间来解决这个问题 我的应用程序有一些外部 API 调用和邮件程序 我已将它们设置为在后台运行 ActiveJob 在 Heroku 上 我设置了两个工作人员 并且我正在使用 R
  • 如何在 Eclipse 中格式化 html 文件?

    XML 格式工作得很好 但 html 格式却不行 事实上 如果我对 html 文件使用 cmd shift F 它几乎会左对齐所有内容 我附上了之前和之后的照片 有谁知道如何解决这一问题 我尝试了 HTML 格式首选项 但没有成功 请注意
  • Maxima 中 Maple“unapply”或 Mathematica“Function”的模拟

    在 Wolfram Mathematica 中 我们可以定义作用于函数 即返回函数的函数 的运算符 例如至于下面示例中作用于两个参数的函数的第一个参数的乘法运算符 X f Function x y x f x y 然后我们可以将此运算符应用
  • 给定一个CGPath,如何让它弯曲?

    在下面的屏幕截图中 当您拖动单词气球的尾部 从气球连接到人的嘴的东西 时 形状会弯曲 如图中两个气球尾部之间的差异所示 我想知道 这是怎么做到的 我假设您需要从 CGPath 开始并对它做一些事情 有人知道这是什么吗 更新 所以如果我想弯曲