我正在开发一个用户可以绘制线条的应用。同一个应用程序的桌面版本能够在负坐标上绘制线条,我也希望在iOS应用程序中具有相同的功能。
到目前为止我尝试了什么: -
我有一个UIViewController
,我已经覆盖了- (void)drawRect:(CGRect)rect
并绘制了这条线。这是我正在使用的代码: -
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextClearRect(context, self.bounds);
CGPoint startPoint = CGPointMake(self.startHandle.frame.origin.x + self.startHandle.frame.size.width/2, self.startHandle.frame.origin.y + self.startHandle.frame.size.height/2);
CGPoint endPoint = CGPointMake(self.endHandle.frame.origin.x + self.endHandle.frame.size.width/2, self.endHandle.frame.origin.y + self.endHandle.frame.size.height/2);
CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor);
CGContextSetLineWidth(context, 2.0f);
CGContextMoveToPoint(context, startPoint.x, startPoint.y ); //start at this point
CGContextAddLineToPoint(context, endPoint.x, endPoint.y); //draw to this point
在我将startPoint.x
作为负值之前,它非常有效。对于负值,我不会看到0,0坐标后面的线部分。任何帮助或信息都表示赞赏。
答案 0 :(得分:2)
继续@matt说的话(他已经删除了他的答案,因为它仍然有用而感到羞耻),你只想将变换应用于上下文,以便在标准的笛卡尔坐标系中绘制,其中{{ 1}}是屏幕的中心。
从(0,0)
内部提供给您的上下文的来源位于屏幕的左上角,正y方向位于屏幕下方。
首先,我们首先想要翻转y轴,使正y方向上升到屏幕上。
我们可以使用drawRect
来完成此操作。这将反映上下文的y轴。因此,这个反射的上下文将具有y轴,其中正方向在屏幕上方。
接下来,我们要将上下文转换为正确的位置,以便CGContextScaleCTM(context, 1, -1)
对应于屏幕的中心。因此,我们应该将y轴向下移动高度的一半(使y轴上的(0,0)
现在位于中心),并将x轴向右移动一半宽度。
我们可以使用0
来完成此操作,其中CGContextTranslateCTM(context, width*0.5, -height*0.5)
和width
分别是视图的宽度和高度。
现在您的上下文坐标将如下所示:
您可以在height
中实现此功能:
drawRect
这将提供以下输出:
我添加了红线代表y和x轴,以澄清我们在这里所做的事情。
答案 1 :(得分:0)
CGContextClearRect(context, self.bounds);
你可以画出这个界限,请做一个更大的矩形。