모양을 그리면 선이 지워집니다
문제
나는 그것을 터치하여 화면에서 모양을 그리기위한 응용 프로그램을 만들려고 노력하고 있습니다.
나는 한 지점에서 다른 지점으로 선을 그릴 수 있지만 각 새로운 추첨에서 지 웁니다.
내 코드는 다음과 같습니다.
CGPoint location;
CGContextRef context;
CGPoint drawAtPoint;
CGPoint lastPoint;
-(void)awakeFromNib{
//[self addSubview:noteView];
}
-(void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
location = [touch locationInView:touch.view];
[self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
[[UIColor blueColor] set];
CGContextSetLineWidth(context,10);
drawAtPoint.x =location.x;
drawAtPoint.y =location.y;
CGContextAddEllipseInRect(context,CGRectMake(drawAtPoint.x, drawAtPoint.y, 2, 2));
CGContextAddLineToPoint(context,lastPoint.x, lastPoint.y);
CGContextStrokePath(context);
lastPoint.x =location.x;
lastPoint.y =location.y;
}
당신의 도움을 주셔서 감사합니다-
니르.
해결책
발견 한 바와 같이 -DrawRect는 뷰의 내용을 표시하는 곳입니다. 당신은 여기에서 그린 것을 화면에서만 볼 수 있습니다.
이것은 스테이지에 선을 포함하는 movieclip을 추가 할 수있는 플래시와 같은 것보다 훨씬 낮은 수준이며, 나중에 스테이지에 선이 포함 된 다른 movieclip을 추가하고 이제 두 줄을 볼 수 있습니다!
당신은 약간의 일을해야하고
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
UITouch *touch = [[event allTouches] anyObject];
location = [touch locationInView:touch.view];
[self addNewLineFrom:lastPoint to:location];
lastPoint = location;
[self setNeedsDisplayInRect:CGRectMake(0, 0, 320, 480)];
}
- (void)drawRect:(CGRect)rect {
context = UIGraphicsGetCurrentContext();
for( Line *eachLine in lineArray )
[eachLine drawInContext:context];
}
나는 당신이 이것을 당신이 필요로하는 것에 살펴 보는 방법을 볼 수 있다고 생각합니다.
이것에 접근하는 또 다른 방법은 Calayers를 사용하는 것입니다. 이 접근법을 사용하면 내부를 그리지 않습니다 - (void) drawRect를 전혀 그리지 않습니다. 레이어를 추가하고 제거하고, 좋아하는 것을 그 내부에 그리면, 뷰가 함께 복합화되어 필요에 따라 화면으로 그리기를 처리합니다. 아마도 당신이 찾고있는 것보다 더.
다른 팁
마다 drawRect
빈 슬레이트로 시작합니다. 다시 그리기 위해 이전에 그린 모든 것을 추적하지 않는다면, 당신은 오래된 손가락이 아닌 손가락의 최신 스 와이프 만 그려집니다. 당신은 매번 당신의 손가락 스 와이프를 추적해야합니다. drawRect
호출됩니다.
모든 라인을 다시 그리기하는 대신 이미지를 그린 다음 이미지를 표시 할 수 있습니다. drawRect:
방법. 이미지는 당신을 위해 줄을 축적합니다. 물론이 방법은 실행 취소를 구현하기가 더 어려워집니다.
UigraphicsbeginimageContext 기능을 사용하여 새로운 이미지 기반 그래픽 컨텍스트를 작성하십시오. 이 컨텍스트를 작성한 후 이미지 내용을 그린 다음 UigraphicsGetImageFromCurrentImageContext 기능을 사용하여 그린 내용에 따라 이미지를 생성 할 수 있습니다. (원하는 경우, 계속 그리기 및 추가 이미지를 생성 할 수도 있습니다.) 이미지 생성이 완료되면 uigraphicsendimagecontext 기능을 사용하여 그래픽 컨텍스트를 닫으십시오. Core Graphics를 선호하는 경우 CGBitMapContextCreate 함수를 사용하여 비트 맵 그래픽 컨텍스트를 작성하고 이미지 내용을 그릴 수 있습니다. 그리기를 마치면 cgbitmapcontextcreateimage 함수를 사용하여 비트 맵 컨텍스트에서 cgimageref를 만듭니다. 핵심 그래픽 이미지를 직접 그리거나 UIIMAGE 객체를 초기화하기 위해이 IT를 사용할 수 있습니다.