내가 일부 코드 아래와 같이 가지고UIVew에 선을 그릴 때 왜 backgoundColor가 필요합니까?
- (void)drawRect:(CGRect)rect
{
[super drawRect:rect];
[self drawWithBezierPath];
//[self drawOnCurrentGraphicsContext];
}
- (void)drawWithBezierPath
{
if (self.selectedButtons.count > 0) {
UIBezierPath *bezierPath = [UIBezierPath bezierPath];
for (int i = 0; i < self.selectedButtons.count; i++) {
if (i == 0) {
UIButton *firstButton = [self.selectedButtons objectAtIndex:0];
[bezierPath moveToPoint:firstButton.center];
} else {
UIButton *button = [self.selectedButtons objectAtIndex:i];
[bezierPath addLineToPoint:button.center];
[bezierPath moveToPoint:button.center];
}
}
[bezierPath addLineToPoint:self.currentPoint];
[bezierPath setLineWidth:5.0f];
[bezierPath setLineJoinStyle:kCGLineJoinRound];
[[UIColor yellowColor] setStroke];
[bezierPath stroke];
}
}
는 I 선을 그리고 자 할 때의 손가락 움직임 :
- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[self onTouch:touch];
}
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event
{
UITouch *touch = [touches anyObject];
[self onTouch:touch];
}
- (void)onTouch:(UITouch *)touch
{
if (touch) {
CGPoint point = [touch locationInView:self];
self.currentPoint = point;
UIButton *button = [self buttonContainsPoint:point];
if (button && ![self.selectedButtons containsObject:button]) {
[self.selectedButtons addObject:button];
button.selected = YES;
}
[self setNeedsDisplay];
}
}
도시 상기 화상으로서
, I는 손가락을 이동할 때 그것은 내가 기대하지 않는 많은 라인을 그립니다.
나는 한번도 그려진 라인을 취소 할 수 CGContextClearRect
과 같은 작업을 수행 할 수 있습니다 알고 있지만, 내가 찾은 중요한 건 내가 self.backgroundColor = [UIColor clearColor];
를 작성하는 경우 CGContextClearRect
하지 않고, 그 이전에 그려진 선이 자동으로 지워집니다 점이다.
그래서 명시 적으로 배경을 설정하지 않는 경우는 backgroundColor로는 nil
될 것이며, 아이폰 OS는 라인 이전에 그려 취소하지 않을 것이다, 또는 그것을하지만 나도 몰라 않습니다.
아무도 말해 줄 수 없습니까? 감사합니다 :-)
감사 @Claus, 당신의 추측은 너무 내 생각, 그래서 당신의 대답을 받아 들일 수 있지만, 난 그냥 당신에게 당신의 답변에 대한 업 투표를했다. –