转换drawRect中绘制的内容

时间:2013-08-30 18:10:16

标签: ios xcode drawing drawrect quartz-core

我有一个UIView子类,以这种方式在drawRect中绘制一些东西:

CGContextRef contextRef = UIGraphicsGetCurrentContext();

CGContextSetRGBFillColor(contextRef, 0.2, 1, 0.2, 0.8);

CGContextFillEllipseInRect(contextRef, CGRectMake(24, 24, 4, 4));
CGContextFillEllipseInRect(contextRef, CGRectMake(49, 10, 4, 4));
CGContextFillEllipseInRect(contextRef, CGRectMake(73, 24, 4, 4));

我希望能够移动那些绘制的点(特别是旋转它)。我怎么能这样做,drawRect绘制在哪里?

谢谢!

2 个答案:

答案 0 :(得分:2)

如果我理解正确,你想要做的是移动(顺时针或逆时针旋转)你正在绘制的点,对吗?

如果是这种情况,而不是使用CoreGraphics绘制点,我建议你做的是创建一个UIView子类,它知道如何绘制一个点,并且它是整个大小(宽度和高度)对应于点的直径。同时使背景透明。

完成后,您可以根据需要创建任意数量的点,并将其添加为另一个包含视图的子视图。如果你这样做,你将能够通过修改它们的frame.origin属性来自由移动点的原点(实际上是UIViews)。 更重要的是,frame UIView的一个属性会自动为您动画,每当您更改任何点的位置(原点)时,动画都会被动画化。

如果您需要帮助,请与我们联系。

希望这有帮助!

答案 1 :(得分:2)

与之前发布的答案不同,我认为你的意思是想要旋转3个点的集合,而不是单独移动这些点。

您想在UIView子类上设置transform属性:

self.transform = CGAffineTransformMakeRotation(M_PI_2); // pi/2 = 90deg clockwise

除了能够旋转视图外,您还可以使用变换移动和缩放。而且您可以轻松地从一个变换动画到另一个变换。

设置视图变换时有很多棘手的事情,例如设置视图边界与其框架之间存在显着差异,设置视图图层的锚点会改变旋转点。阅读View Geometry and Coordinate Systems中的View Programming Guide for iOS部分。