0

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

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

2 回答 2

1

检查值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];

}
于 2013-10-29T13:33:06.920 回答
0

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

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

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

于 2013-10-29T15:15:26.677 回答