我是quartzCore的新手,我不是那么容易习惯的。 我想在视图中绘制一些基本形状,并独立旋转/放大每个形状。
您能否就如何做到这一点给我一些指示或想法? 谢谢
答案 0 :(得分:0)
实际的Quartz操作不能保证非常快 - 如果你想要一堆单独旋转/缩放的单独形状,那么最好将每个单独的形状放在一个单独的视图中,并通过调整变换来执行旋转和缩放属性。 iOS中的合成器通过缓存所有视图的图像并对变换进行调整,只需调整缓存图像绘制到屏幕的方式。因此,如果放大太远,像素化将是一个问题,但即使没有进入CATiledLayer等机制,也可以异步和按需提供不同级别的细节(如在Safari中,放大显示视图的像素化版本然后一旦准备好就转换为全分辨率),您可以先将视图调整为最大大小,然后将其缩小。
如果不完全了解您的专业水平,您将需要声明一个或多个可以绘制其中一个形状的自定义UIView子类。然后,您需要在其中使用CoreGraphics调用实现自己的-drawRect:。
UIView上的transform属性采用CGAffineTransform,可以在CoreAnimation意义上进行动画处理。
如果你的一个自定义UIViews只是从视图的左上角到右下角绘制一条对角线(可能是一件无用的事情,但是出于示例的目的),你可能会:
- (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);