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

person Patricia    schedule 28.10.2013    source источник
comment
Привет @Люси. Немного больше контекста было бы здорово. Где реализован этот метод? Как вы это называете?   -  person LuisCien    schedule 29.10.2013
comment
@LuisCien - я пришлю больше завтра, когда вернусь к работе. Спасибо. :-)   -  person Patricia    schedule 29.10.2013
comment
Можешь нарисовать viewDidLoad тогда? Я не думаю, что ты можешь...   -  person trojanfoe    schedule 29.10.2013


Ответы (2)


Проверьте значение context — я предполагаю, что это может быть nil.

Если вы поместите этот код в метод drawRect подкласса UIView, он должен работать, поскольку у вас будет правильный контекст.

В качестве альтернативы вы можете создать свой собственный контекст 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];

}
person Ian L    schedule 29.10.2013

CGContextRef context = UIGraphicsGetCurrentContext(); в этот момент будет равно нулю... вы в основном хотите добавить этот код в свой код рисования, если только вы не хотите добавлять статические виды или изображения для представления креста.

Текущий контекст не будет вашим объектом просмотра, если он не имеет фокуса, что происходит автоматически к моменту вызова метода drawRect:.

вы можете попеременно рисовать изображение и добавлять его в представление изображения, вы можете сделать это при загрузке, и с этого момента рисование будет происходить автоматически.

person Grady Player    schedule 29.10.2013