iPad:QuartzCore:多种形状

时间:2010-12-23 15:12:35

标签: xcode ipad quartz-2d

我是quartzCore的新手,我不是那么容易习惯的。 我想在视图中绘制一些基本形状,并独立旋转/放大每个形状。

您能否就如何做到这一点给我一些指示或想法? 谢谢

1 个答案:

答案 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);