drawrect를 재정의하는 사용자 정의 UIView 하위 클래스가 있습니다. 뷰는 데이터 소스에서 데이터를 가져 와서 해당 정보 중 일부를 뷰 컨트롤러 인 대리자로 전달하여 그리기에 필요한 문자열로 처리합니다. 처음 setneedsdisplay가 호출되면 뷰는 검은 색 사각형으로 나타나지만 두 번째 호출하면 제대로 작동합니다. 모든 프레임 크기 및 위치가 올바르게 설정되어 대리자 및 데이터 소스가 제대로 설정되어 있는지 확인합니다. 문제에 빛나는 빛을 도움이 될 다른 코드가있는 경우uview 서브 클래스가 처음으로 setneedsdisplay가 호출 될 때 검정색 사각형으로 표시되지만 그 후에는 ok
- (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]];
}
}
가 알려줘 다음은 위반의 drawRect 코드입니다.
완전히 일 했어, 끝내! 여전히 그것이 두 번째 setneeds 동안 나에게 움직일 것 인 신비적인 전시. – chartman
도움이 되니 기쁩니다! 앞서 언급했듯이 UIView는 drawRect에 대한 두 번째 호출에서 해당 줄을 무시할 수 있습니다. 왜냐하면 색상을 변경하지 않기 때문입니다. – baris
맞아요, 분명히 나는 아주 조심성있는 독자가 아닙니다. 아마 내가 처음에 곤경에 처 했을까? – chartman