swift - 我将如何实现一个数字保持垂直的旋转罗盘表盘?
问题描述
我正在尝试为我的应用程序生成一个显示,其工作方式类似于标准 iPhone 指南针应用程序 - 具体而言,表盘旋转,但注释(N、S、E、W 和各种数字)在环绕时保持垂直。我现在有一个可以运行的应用程序版本,但我不得不混合旋转表盘的 CGAffineTransforms,然后手动将文本重新绘制到正确的位置。除了愚蠢和浪费之外,我不相信我可以使用动画来平滑旋转。有没有做这种事情的标准方法?我想我可以为环周围的每个数字/字母生成一个独特的仿射变换,但这似乎也很昂贵。我知道这是可以做到的,因为正如他们所说,标准的指南针应用程序“像黄油一样光滑”。有任何想法吗?
我的应用程序目前有一个视图,它首先绘制表盘的非文本部分。我使用 CGAffineTransforms 根据来自 CLLocation 的输入来旋转它。这很好用。我有第二个视图,它再次基于 CLLocation 标题手动重绘罗盘刻度盘的所有文本部分。我可以为 AffineTransforms 设置动画,但不能对重绘进行动画处理,因此要么更新不同步(表盘移动平稳,而文本更加紧张),要么一切都变得紧张。
不适用
希望有一个统一的绘图技术,我可以制作动画,这样我的指南针动画就会像内置应用程序一样流畅。
解决方案
我想我想通了。对于那些有同样问题的人,这是一个简单的解决方案:
- 使用旋转拨盘创建 UIView
- 将您的文本添加为 UILabel,使它们成为该视图的子视图
- 当您旋转主视图时,向它发送一条消息以将其所有子视图旋转相反的量。
将所有这些包裹在动画中,它会像丝绸一样光滑。
希望对某人有所帮助...
推荐阅读
- r - 使用 dplyr 为多个组应用函数
- c# - MS Bot Framework - 通过降价链接传递数据
- html - 如何在引导程序中的卡之间添加填充
- angular - ngx-translate:消息显示时间过长
- console - Clion 外部工具输出不再显示?
- python - 在函数中读取数据时出现 pyVISA 错误
- ruby-on-rails - 如何通过使用has_many
- r - 存储输入值以检查应用按合同设计时后置条件是否成立
- sqlite - 如何计算sqlite中当前日期和过去日期之间的差异?本地机器的日期可以更改
- javascript - 单击其他组件中的某个按钮时更改语义 UI 选项卡