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



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

- (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);
}

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

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

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

- (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];
}
此时

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

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

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

最新更新