2013-09-09 3 views
2

У меня странная проблема, когда я пытаюсь нарисовать прямоугольники, которые перекрывают друг друга. См изображение ниже:ios - Прямоугольники с перекрывающимися границами

enter image description here

Как можно видеть, в верхней строке находится торговый код, чем другие (дно и вертикальные), в частности тикере, чем линии, разделяющей прямоугольников. Я использовал следующий код:

for (int i = 0; i < 7; i++) 
{ 

    (...) 
    CGContextBeginPath(context); 
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextSetLineWidth(context, self.cellBorder); 
    CGRect dayRect; 
    if (i > 0) 
     dayRect = CGRectMake(i*cellWidth+self.marginX - 1, 0, cellWidth, cellHeight); 
    else 
     dayRect = CGRectMake(i*cellWidth+self.marginX , 0, cellWidth, cellHeight); 
    CGContextStrokeRect(context, dayRect); 

} 

Любое предложение?

ответ

2

Причина, по которой верхняя строка тоньше, чем у других, заключается в том, что у вас есть толщина линии self.cellBorder, которая больше 0, и вы рисуете это на линии, где y = 0. Когда вы это сделаете, вы увидите только половину толщины линии, так как другая половина находится над выводом рисунка. Чтобы исправить это, вам просто нужно нарисовать верхние строки в позиции y self.cellBorder/2. Вот как изменился бы код:

for (int i = 0; i < 7; i++) { 
    // ... 
    CGContextBeginPath(context); 
    CGContextSetStrokeColorWithColor(context, [UIColor blackColor].CGColor); 
    CGContextSetLineWidth(context, self.cellBorder); 
    CGRect dayRect; 
    if (i > 0) 
     dayRect = CGRectMake(i*cellWidth+self.marginX - 1, self.cellBorder/2, cellWidth, cellHeight); 
    else 
     dayRect = CGRectMake(i*cellWidth+self.marginX , self.cellBorder/2, cellWidth, cellHeight); 
    CGContextStrokeRect(context, dayRect); 
} 
+0

как простой, как математика! Благодарю. – giuseppe

Смежные вопросы