将iOS设备上的绘图空间旋转90度

时间:2015-02-15 10:07:43

标签: ios transformation quartz-graphics

我想用Quartz 2D做一些事情,我觉得应该很简单,但结果却不是: - (

我尝试做的是以下内容。我想将绘图区域旋转90度,这样我绘制的任何东西基本上都会旋转90度。原来旋转工作正常,但我绘制的矩形从屏幕开始,并没有覆盖整个高度,但只是像宽度一样高(320像素)看截图。

这是我的代码(在drawRect中):

CGContextRef ctx = UIGraphicsGetCurrentContext(); //get the graphics context
CGColorSpaceRef colorspace = CGColorSpaceCreateDeviceRGB();

CGContextSetRGBStrokeColor(ctx, 0.0, 0.0, 0.0, 1);
CGContextSetLineWidth(ctx, 1.0) ;

float width = rect.size.width ;
float height = rect.size.height ;

CGContextTranslateCTM(ctx, rect.origin.x +  width / 2,  rect.origin.y + height / 2 ) ; // make rotation point the middle
CGContextRotateCTM(ctx, 1.57079633) ; // 90 degrees
CGContextTranslateCTM(ctx, - height / 2, - width / 2) ; // move x / y back to where they belong


CGRect myRect = CGRectMake(0, 0, height, width) ;
CGContextFillRect(ctx, myRect) ;

结果如下: sccreenshot of iPhone5 Simulator

我在这里缺少什么?

2 个答案:

答案 0 :(得分:0)

CGRect myRect = CGRectMake(0, 0, height, width) ;

参数是{x,y,w,h}

试     CGRect myRect = CGRectMake(0,0,width,height);

另外,您应该实现一个DEG_TO_RAD函数来帮助将角度传递到这些绘图函数中以使编码更容易

#define DEG_TO_RAD(angle) ((angle) / 180.0 * M_PI)

CGContextRotateCTM(ctx, 1.57079633) ; // 90 degrees

变为

CGContextRotateCTM(ctx, DEG_TO_RAD(90)) ;

添加好处:您丢失了评论,您可以以度数

以编程方式递增此值

答案 1 :(得分:0)

我发现了问题。在创建视图时,我错误地将宽度用于高度,反之亦然。在我修复了视图中我必须做的所有事情之后:

CGContextTranslateCTM(ctx, rect.origin.x +  width / 2,  rect.origin.y + height / 2 ) ; // make rotation point the middle
CGContextRotateCTM(ctx, DEG_TO_RAD(90)) ;
CGContextTranslateCTM(ctx, - height / 2, - width / 2) ; // move x / y back to where they belong

CGRect myRect = CGRectMake(0, 0, height-5, width) ; // height determines width and width is height

CGContextClipToRect(ctx, myRect) ; // prevent lines being draws outside

从那时起,我只使用myRect作为所有绘图操作的参考。 这是结果。 enter image description here