我想用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) ;
结果如下:
我在这里缺少什么?
答案 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作为所有绘图操作的参考。 这是结果。