Objective-C - 如何在中心绘制垂直线

时间:2013-10-28 23:27:51

标签: objective-c cgcontext

这似乎是一个愚蠢的问题,或者我只是累了,但我没有得到我想要的结果。我不确定我得到任何结果,因为我看不到我的台词。有人可以告诉我我做错了吗?

- (void)drawCenterPlus
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 20);
    [[UIColor redColor] setStroke];

    CGPoint hStart;
    CGPoint hEnd;
    CGPoint vStart;
    CGPoint vEnd;

    hStart.x = self.center.x - 20.0;
    hStart.y = self.center.y;
    hEnd.x = self.center.x + 20.0;
    hEnd.y = self.center.y;
    vStart.x = self.center.x;
    vStart.y = self.center.y - 20.0;
    vEnd.x = self.center.x;
    vEnd.y = self.center.y + 20.0;

    //line 1
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, hStart.x, hStart.y);
    CGContextAddLineToPoint(context, hEnd.x, hEnd.y);
    CGContextStrokePath(context);

    //line 2
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, vStart.x, vStart.y);
    CGContextAddLineToPoint(context, vEnd.x, vEnd.y);
    CGContextStrokePath(context);
}

提前谢谢。

----------------------------------------------- -------- 其他信息 --------------------------------- ---------

实际上这是从viewDidLoad调用的。我只是想在视图的中心画一个“+”。我已经使视图变成了不同的颜色,因此可以看到“+”。 “+”可以用黑色绘制,我只是希望能够看到它。是的,我可以在屏幕上放置一个“+”文本,但最终我需要在矩形内部绘制它。

我将再次尝试使用空白视图来查看绘图是否隐藏在子视图后面。走着瞧。再次感谢您的帮助。

----------------------------------------------- --------最新方法---------------------------------------- -------

行。只是一个新项目,其中一个视图只有(希望)屏幕中间的红色“+”。但没有任何表现。我做错了什么?

@implementation TESTViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
// Do any additional setup after loading the view, typically from a nib.

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 20);
    [[UIColor redColor] setStroke];

    CGPoint hStart;
    CGPoint hEnd;
    CGPoint vStart;
    CGPoint vEnd;

    hStart.x = self.view.center.x - 20.0;
    hStart.y = self.view.center.y;
    hEnd.x = self.view.center.x + 20.0;
    hEnd.y = self.view.center.y;
    vStart.x = self.view.center.x;
    vStart.y = self.view.center.y - 20.0;
    vEnd.x = self.view.center.x;
    vEnd.y = self.view.center.y + 20.0;

    //line 1
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, hStart.x, hStart.y);
    CGContextAddLineToPoint(context, hEnd.x, hEnd.y);
    CGContextStrokePath(context);

    //line 2
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, vStart.x, vStart.y);
    CGContextAddLineToPoint(context, vEnd.x, vEnd.y);
    CGContextStrokePath(context);
}

2 个答案:

答案 0 :(得分:1)

检查context的值 - 我猜它可能是nil

如果将此代码放在UIView子类的drawRect方法中,它应该有效,因为您将拥有有效的上下文。

或者,您可以创建自己的UIImage上下文,在其中绘制形状并将图像添加为子视图。 E.g。

- (void)drawCenterPlus {

    UIGraphicsBeginImageContext(self.view.frame.size);

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextSetLineWidth(context, 20);
    [[UIColor redColor] setStroke];

    CGPoint hStart;
    CGPoint hEnd;
    CGPoint vStart;
    CGPoint vEnd;

    hStart.x = self.view.center.x - 20.0;
    hStart.y = self.view.center.y;
    hEnd.x = self.view.center.x + 20.0;
    hEnd.y = self.view.center.y;
    vStart.x = self.view.center.x;
    vStart.y = self.view.center.y - 20.0;
    vEnd.x = self.view.center.x;
    vEnd.y = self.view.center.y + 20.0;

    //line 1
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, hStart.x, hStart.y);
    CGContextAddLineToPoint(context, hEnd.x, hEnd.y);
    CGContextStrokePath(context);

    //line 2
    CGContextBeginPath(context);
    CGContextMoveToPoint(context, vStart.x, vStart.y);
    CGContextAddLineToPoint(context, vEnd.x, vEnd.y);
    CGContextStrokePath(context);

    UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();

    UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
    [self.view addSubview:imageView];

}

答案 1 :(得分:0)

此时

CGContextRef context = UIGraphicsGetCurrentContext();将为零...您基本上想要将此代码添加到绘图代码中,除非您想添加静态视图或图像来表示交叉。

当前上下文不会是您的视图对象,除非它具有焦点,这在调用drawRect:方法时自动发生。

您可以交替绘制到图像并将其添加到图像视图中,您可以在加载时执行此操作,并且绘图将从该点自动发生。