quartz2d翻译起源

时间:2011-01-14 23:25:22

标签: objective-c ipad quartz-graphics scale translate

我对quartz2d的理解是代码CGContextTranslateCTM(context, x, y);转换了坐标系。我有一个有很多形状的quartz2d视图,用户需要能够平移和缩放它。但是,使用CGContextScaleCTM(context, scaleX, scaleY);代码时,所有内容都会围绕原点进行缩放,而不是用户正在查看的视点的中心。

我的解决方法是使用以下代码:

CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context, 512.0+offset.x, 384.0+offset.y);  
//(512, 384) is the center of the iPad screen
CGContextScaleCTM(context, scale, scale);

你可以很好地翻译,但事情仍然可以扩展到角落。怎么了?

编辑:哦。哇。咄。如果移动原点,形状也会移动,因此无法相对于形状移动它。现在我知道什么是错的,但是我该怎么做?(独立于形状移动原点)

2 个答案:

答案 0 :(得分:0)

使用CoreGraphics C API的经验不多,但您是否考虑过将视图粘贴到UISCrollView上?如果功能在那里并且它是免费的,为什么不使用它呢?

答案 1 :(得分:0)

您可以为每个形状创建一个UIView类。 为每个形状实例化一个UIView对象以进行移动。

然后用shape.center = CGPointMake(x,y)更改视图对象的中心; 可能该方法是调用bounds.center,查看UIView。

这将自动调用drawRect(),一切正常!