Frage

Ich versuche, eine Anwendung zum Zeichnen von Formen auf dem Bildschirm zu stellen, indem ich sie berühre.

Ich kann eine Linie von einem Punkt zum anderen zeichnen- aber sie löscht auf jeder neuen Ziehung.

Hier ist mein Code:

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;
}

Schätze deine Hilfe-

Nir.

War es hilfreich?

Lösung

Wie Sie festgestellt haben, zeigen Sie den Inhalt einer Ansicht an. Sie werden nur auf dem Bildschirm "sehen", was Sie hier zeichnen.

Dies ist viel niedriger als Blitz, bei dem Sie einen Movieclip mit einer Linie zur Bühne hinzufügen könnten, und einige Zeit später fügen Sie eine weitere Movieclip hinzu, die eine Linie auf der Bühne enthält, und jetzt sehen Sie - zwei Zeilen!

Sie müssen etwas Arbeit erledigen und so etwas wie ..

- (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];

}

Ich denke, Sie können sehen, wie Sie dies auf das ausfindern können, was Sie brauchen.

Eine andere Möglichkeit, dies zu nähern, besteht darin, Calayers zu verwenden. Wenn Sie diesen Ansatz verwenden, zeichnen Sie überhaupt nicht in den Drawrect - - (void) Drawrect - Sie fügen und entfernen Schichten, zeichnen Sie, was Ihnen in ihnen gefällt, und die Ansicht verarbeitet sie zusammen und zeichnet nach Bedarf zum Bildschirm. Wahrscheinlich mehr, wonach Sie suchen.

Andere Tipps

Jedes Mal das drawRect heißt, Sie beginnen mit einem leeren Schiefer. Wenn Sie nicht alles im Auge behalten, was Sie zuvor gezeichnet haben, um es erneut zu zeichnen, zeichnen Sie nur den neuesten Swipe Ihres Fingers und nicht die alten. Sie müssen alle Ihre Finger -Swipes im Auge behalten, um sie jedes Mal neu zu zeichnen drawRect wird genannt.

Anstatt jede Zeile neu zu zeichnen, können Sie in ein Bild zeichnen und dann einfach das Bild in Ihrem anzeigen drawRect: Methode. Das Bild sammelt die Zeilen für Sie an. Natürlich erschwert diese Methode die Implementierung.

Von dem iPhone Application Programming Guide:

Verwenden Sie die UigraphicsBeginimageContext-Funktion, um einen neuen bildbasierten Grafikkontext zu erstellen. Nachdem Sie diesen Kontext erstellt haben, können Sie Ihren Bildinhalt in ihn zeichnen und dann die Funktion von UigraphicsGetImageFromCurrentImageContext verwenden, um ein Bild basierend auf dem zu generieren, was Sie gezeichnet haben. (Wenn Sie gewünscht sind, können Sie sogar zusätzliche Bilder zeichnen und generieren.) Wenn Sie Bilder erstellen, verwenden Sie die UigraphicsendimageContext -Funktion, um den grafischen Kontext zu schließen. Wenn Sie die Verwendung von Kerngrafiken bevorzugen, können Sie die CGBitMapContextCreate -Funktion verwenden, um einen Bitmap -Grafikkontext zu erstellen und Ihren Bildinhalt in ihn zu zeichnen. Wenn Sie das Zeichnen beenden, verwenden Sie die Funktion cgbitmapContextCreateImage, um ein CGImageRef aus dem Bitmap -Kontext zu erstellen. Sie können das Kerngrafikbild direkt zeichnen oder damit ein UIImage -Objekt initialisieren.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top