У меня есть пользовательский подкласс UIView, который переопределяет drawrect. Представление получает свои данные из источника данных и передает часть этой информации своему делегату, контроллеру представления, для обработки его в строки, которые ему нужно рисовать. В первый раз, когда вызывается setneedsdisplay, представление отображается как черный прямоугольник, но он отлично работает, если он называется второй раз. Все размеры и позиции кадра устанавливаются правильно, поэтому я уверен, что делегат и источник данных правильно настроены с самого начала. Вот код обижая DrawRect:Подкласс uiview, показывающий, как черные прямоугольники первый раз setneedsdisplay вызывается, но нормально после этого
- (void)drawRect:(CGRect)rect
{
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(context, 2.0);
CGColorSpaceRef colorSpace=CGColorSpaceCreateDeviceRGB();
CGFloat components[] = {0, 0, 0, 1.0};
CGColorRef color = CGColorCreate(colorSpace, components);
;
//CGContextStrokeRect(context, CGRectMake(1, 1, self.frame.size.width-1.0, self.frame.size.height-1.0));
CGContextMoveToPoint(context, 0, [_delegate denominatorPoint:self].y);
if ([_delegate numeratorBiggerThanDenominator:self]==YES)
CGContextAddLineToPoint(context,[[_delegate numeratorString:self]sizeWithFont:[_delegate fontToDrawWith:self]].width , [_delegate denominatorPoint:self].y);
else
CGContextAddLineToPoint(context,[[_delegate denominatorString:self]sizeWithFont:[_delegate fontToDrawWith:self]].width , [_delegate denominatorPoint:self].y);
if ([_delegate hasAFraction:self]==YES) {
CGContextSetStrokeColorWithColor(context, color);
CGContextStrokePath(context);
}
CGColorSpaceRelease(colorSpace);
CGColorRelease(color);
self.backgroundColor=[UIColor clearColor];
[[_delegate numeratorString:self] drawAtPoint:[_delegate numeratorPoint:self] withFont:[_delegate fontToDrawWith:self]];
NSLog([_delegate numeratorString:self]);
if ([_delegate hasAFraction:self]==YES)
[[_delegate denominatorString:self] drawAtPoint:[_delegate denominatorPoint:self] withFont:[_delegate fontToDrawWith:self]];
[[_delegate Variable:self] drawAtPoint:[_delegate variablePoint:self] withFont:[_delegate fontToDrawWith:self]];
if ([_delegate hasAParenthesTerm:self]==YES) {
//NSLog(@"parentheses being drawn");
NSString* [email protected]" (";
[openParentheses drawAtPoint:[_delegate openParenthesesPoint:self] withFont:[_delegate fontToDrawWith:self]];
NSString* [email protected]")";
[closedParentheses drawAtPoint:[_delegate closeParenthesesPoint:self] withFont:[_delegate fontToDrawWith:self]];
}
}
Позвольте мне знать, если есть другой код, который помог бы пролить свет на эту проблему.
полностью работал, потрясающе! все еще таинственный, что он будет работать во время второго показа, хотя и для меня. – chartman
Рад, что это помогло! Как я уже упоминал, вероятно, потому, что UIView может игнорировать эту строку во втором вызове drawRect, потому что вы не меняете цвет – baris
Правильно, по-видимому, я не очень осторожный читатель. Наверное, что привело меня в беду, в первую очередь! – chartman