【发布时间】:2010-12-23 15:12:34
【问题描述】:
我是quartzCore 的新手,而且我不太容易习惯它。 我想在视图中绘制一些基本形状并独立旋转/放大它们中的每一个。
你能给我一些关于如何做到这一点的方向或想法吗? 谢谢
【问题讨论】:
我是quartzCore 的新手,而且我不太容易习惯它。 我想在视图中绘制一些基本形状并独立旋转/放大它们中的每一个。
你能给我一些关于如何做到这一点的方向或想法吗? 谢谢
【问题讨论】:
不能保证实际的 Quartz 操作非常快速 — 如果您想要一堆单独旋转/缩放的单独形状,那么您最好将每个形状放在单独的视图中并通过调整变换来执行旋转和缩放财产。 iOS 中的合成器通过缓存所有视图的图像和对变换的调整来工作,只需调整缓存图像在屏幕上的绘制方式。因此,如果您放大得太远,像素化将是一个问题,但即使没有进入诸如 CATiledLayer 之类的机制以异步和按需提供不同级别的细节(如在 Safari 中,放大显示视图的像素化版本,然后准备好后立即转换为全分辨率),您可以先将视图调整为最大尺寸,然后再缩小。
在不确切了解您的专业水平的情况下,您可能需要声明一个或多个自定义 UIView 子类,这些子类可以绘制您的形状之一。然后,您需要使用其中的 CoreGraphics 调用来实现自己的 -drawRect:。
UIView 上的 transform 属性采用 CGAffineTransform 并且可以在 CoreAnimation 意义上进行动画处理。
如果您的一个自定义 UIView 只是简单地从视图的左上角到右下角绘制一条对角线(这可能是无用的事情,但出于示例的目的),您可能会:
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSaveGState(context);
// we're relative to the inside of the view, so...
CGPoint points[2];
points[0] = CGPointMake(0, 0);
points[1] = CGPointMake(self.bounds.size.width, self.bounds.size.height);
CGContextSetGrayStrokeColor(context, 0.6, 0.6);
CGContextSetLineWidth(context, 2.0);
CGContextStrokeLineSegments(context, points, 2);
CGContextRestoreGState(context);
}
那么你可以这样做,例如:
view.transform = CGAffineTransformMakeScale(0.5, 0.5);
【讨论】: