문제

나는 그것을 터치하여 화면에서 모양을 그리기위한 응용 프로그램을 만들려고 노력하고 있습니다.

나는 한 지점에서 다른 지점으로 선을 그릴 수 있지만 각 새로운 추첨에서 지 웁니다.

내 코드는 다음과 같습니다.

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: 방법. 이미지는 당신을 위해 줄을 축적합니다. 물론이 방법은 실행 취소를 구현하기가 더 어려워집니다.

로부터 iPhone 응용 프로그램 프로그래밍 안내서:

UigraphicsbeginimageContext 기능을 사용하여 새로운 이미지 기반 그래픽 컨텍스트를 작성하십시오. 이 컨텍스트를 작성한 후 이미지 내용을 그린 다음 UigraphicsGetImageFromCurrentImageContext 기능을 사용하여 그린 내용에 따라 이미지를 생성 할 수 있습니다. (원하는 경우, 계속 그리기 및 추가 이미지를 생성 할 수도 있습니다.) 이미지 생성이 완료되면 uigraphicsendimagecontext 기능을 사용하여 그래픽 컨텍스트를 닫으십시오. Core Graphics를 선호하는 경우 CGBitMapContextCreate 함수를 사용하여 비트 맵 그래픽 컨텍스트를 작성하고 이미지 내용을 그릴 수 있습니다. 그리기를 마치면 cgbitmapcontextcreateimage 함수를 사용하여 비트 맵 컨텍스트에서 cgimageref를 만듭니다. 핵심 그래픽 이미지를 직접 그리거나 UIIMAGE 객체를 초기화하기 위해이 IT를 사용할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top