0

任何在 iTunes 上学习过斯坦福 CS193P 课程的人都会从作业 3 (HelloPoly) 中认出这一点。对于不熟悉的人:

我有一个名为 polyView 的自定义视图,它是 PolygonView 的一个实例,是 UIView 的一个子类。在这个视图中,我使用 CGContextDrawLinearGradient 在整个矩形视图上绘制颜色渐变。然后我使用 CGContextDrawPath 在 polyView 的范围内描边和填充多边形。我在视图(和多边形)的中心有一个名为 nameLabel 的 UILabel,它显示了多边形的名称(三角形、四边形、五边形等)。所有这些工作都很好,完成所有这些的代码在 PolygonView 类的 -(void)drawRect 方法中。

我遇到麻烦的地方是额外要求在视图中旋转多边形以响应用户手势。我使用 CGAffineTransformRotate() 来响应 PolygonView 类中的 touchesBegan() 和 touchesMoved() 事件,这基本上也有效。但我只能旋转整个 polyView,而不仅仅是在其上绘制的多边形。我确信我可以返回并重新计算多边形的路径并重新绘制/填充路径以响应每个 touchesMoved() 事件,但这会很昂贵并且不是最好的方法。如何使用 CGAffineTransformRotate 仅旋转多边形,而不旋转渐变填充视图或中心的标签?

或者有什么方法可以在我可以以所需旋转角度放置在背景 polyView 上的图层上创建多边形?

感谢您在这里为初学者提供的任何帮助!

杜安

4

1 回答 1

0

您可以在进行旋转变换之前执行 CGContextSaveGState(...),然后绘制多边形并在之后使用 CGContextRestoreGState(...) 恢复绘制状态,以免影响以后视图中的任何其他绘制。

于 2010-08-28T22:06:46.557 回答