任何在iTunes上通过斯坦福CS193P课程的人都会从作业3(HelloPoly)中认出这一点。对于那些不熟悉的人:
我有一个名为polyView的自定义视图,它是PolygonView的一个实例,是UIView的子类。在此视图中,我使用CGContextDrawLinearGradient在整个矩形视图上绘制颜色渐变。然后我使用CGContextDrawPath来描边并填充polyView边界内的多边形。我在视图(和多边形)的中心有一个名为nameLabel的UILabel,它显示了多边形的名称(三角形,四边形,五边形等)。所有这一切都很好,所有这些的代码都在PolygonView类的 - (void)drawRect方法中。
我遇到麻烦的另一个要求是在视图中旋转多边形以响应用户手势。我使用CGAffineTransformRotate()来响应PolygonView类中的touchesBegan()和touchesMoved()事件,这基本上也可以。但是我只能旋转整个polyView,而不仅仅是旋转它。我确信我可以返回并重新计算多边形的路径并重新绘制/填充路径以响应每个touchesMoved()事件,但这将是昂贵的,并且不是最好的方法。如何使用CGAffineTransformRotate仅旋转多边形,而不旋转渐变填充视图或中心的标签?
或者有没有办法在一个图层上创建多边形,我可以在所需的旋转角度下放置在背景polyView上?
感谢您的帮助,您可以在这里给初学者!
杜安
答案 0 :(得分:0)
您可以在进行旋转变换之前执行CGContextSaveGState(...),然后绘制多边形并使用CGContextRestoreGState(...)恢复绘图状态,以免影响视图中的任何其他绘图后面。