在 ios 核心图形中绘制电锯

Posted

技术标签:

【中文标题】在 ios 核心图形中绘制电锯【英文标题】:drawing a chainsaw in ios core graphics 【发布时间】:2015-05-17 16:10:25 【问题描述】:

我正在尝试使用 ios 核心图形绘制电锯(只是刀片),但卡在了一个点上,到目前为止我已经绘制了这样的东西:

它看起来很丑,但我只是想看看我能不能画一个,然后再做适当的整理。问题是我可以在顶部和底部平坦的侧面画出牙齿,但我不知道如何在弯曲的角落周围画出牙齿。我自己画了椭圆,所以我知道平面的坐标在哪里,但我不知道如何计算圆角。我的问题是:

    有没有简单的方法在圆角上画出牙齿?

    有没有一种完全不同的更好的方法来在核心图形中绘制这样的东西?

    最后一个问题是关于动画电锯。我希望如果我能完成绘图,那么我可以使用计时器并重新绘制带有偏移量的牙齿,然后在两幅图之间交替以产生移动效果。这是正确的方法吗,还是不值得使用核心图形来制作这样的动画,而使用动画 gif 之类的东西会是更好的方法?

我是核心图形的新手,所以不太了解细节。我可以想象有多种方法可以实现我正在做的事情,但是当我说“这样​​做是正确的方法”时,我的意思是它是正确的方法之一,还是我完全走下坡路错误的路径。谢谢!

【问题讨论】:

这似乎是一个基本的三角问题,而不是一个编程问题。你的三角有问题吗?您真正需要知道的是 sin(angle) = 相反/斜边。 cos(角度)=相邻/斜边。 tan(角度)=对面/相邻。 【参考方案1】:

(1) 在圆角周围绘制牙齿是识别牙齿点的问题。考虑三个齿的内向点将沿着圆角以 1/8pi、3/8pi、5/8pi 和 7/8pi 的角度落下。

这三个齿的外点将落在一个与圆角同心的圆上,该圆角具有更大的半径(大一个齿的高度)。这些将落在 1/4pi、1/2pi 和 3/4pi。同样的想法可以反映到左侧的x

(2) 我想不出一种完全不同的更好的绘图方法,只是指出可以用图像(至少是静态部分)更逼真地完成。

(3) 可能不会明确使用计时器。我认为正确的方法是将链条放在它自己的 CAShapeLayer 上。有两个(或更多)链路径(在齿点的位置上被一些小的相移抵消)。将重复的 CABasicAnimation 添加到在两条路径之间交替的图层。

【讨论】:

以上是关于在 ios 核心图形中绘制电锯的主要内容,如果未能解决你的问题,请参考以下文章

iOS开发UI篇——Core Animation核心动画CAShapeLayer(绘制图形等)简介

iOS 图形绘制(二)-UIBezierPath

iOS的基本图形绘制

IOS核心图形重绘

iOS实现图形编程可以使用三种API(UIKITCore GraphicsOpenGL ES及GLKit)

Cocoa-touch - 用核心图形绘制到一个接触点