0

我有一个 UIView sublass,它以这种方式在 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 画在哪里?

谢谢!

4

2 回答 2

2

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

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

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

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

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

于 2013-08-30T20:39:57.730 回答
2

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

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

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

让我知道您是否需要帮助来实现这一点。

希望这可以帮助!

于 2013-08-30T18:24:12.437 回答