2012-04-09 7 views
1

Ich musste eine kleine Zeichnungs-/Malanwendung erstellen, also wandte ich mich an Beginning IPad Development for IPhone Developers: Mastering the IPad SDK By Jack Nutting, Dave Wooldridge, David Mark.Verbessern der Zeichnungsleistung (für die Dudel-Anwendung)

Es ist ziemlich nett. Die Architektur ist stark. Aber die Zeichnung Anwendung (Dudel) ist nicht sehr gut in Bezug auf die Leistung. Es gibt zwei Hauptprobleme (für mich im Moment):

  1. Am wichtigsten: Die Zeichnung verlangsamt sich nach einer Weile. Grund: drawRect wird jedes Mal für alle Pfade aufgerufen.
  2. Die Zeichnung mit Bleistift-Werkzeug ist nicht glatt. Grund: Es verwendet addLineToPoint: statt (möglicherweise) addQuadCurveToPoint:.
  3. Es gibt kein Radiergummi-Steuerelement. Aber es ist wirklich kein Problem, weil wir weiße Farbe für das Gemälde wählen können, geben Sie eine Illusion eines Radiergummis. Aber wenn es eine bessere Implementierung dafür gibt, interessiert mich das zu wissen.

Frage:

Gibt es eine Lösung gibt, die diese Fragen behandelt werden, und bieten eine einfache, aber effiziente Zeichenanwendung?

Hinweis: Ich brauche auch die Undo/Redo-Funktion.

+0

Haben Sie eine Lösung für Ihren Point 1 gefunden? –

+1

Ich habe es geschafft, die Leistung zu verbessern, aber mit zusätzlichen Kosten. Ich zeichne nicht jedes Mal neu, wenn ein neuer Pfad hinzugefügt wird. Stattdessen zeichne ich ein bereits aufgenommenes Bild des zuvor gezeichneten Bildes. – Mustafa

Antwort

1

Lassen Sie mich versuchen, Ihre Frage nacheinander zu beantworten.

Die Zeichnung mit Bleistift-Werkzeug ist nicht glatt. Grund: Es verwendet addLineToPoint: anstelle von (möglicherweise) addQuadCurveToPoint :.

Was Sie sagen, ist wahr.IOS Gerät sucht nach Berührungen in einem definierten Intervall. Wenn Sie Ihre Hand schnell bewegen, ist es sehr wahrscheinlich, dass Sie am Ende wenige Berührungspunkte verlieren. Daher führt das Verbinden von Punkten unter Verwendung von Linien zu hässlichen Spitzen.

Wir können die Kurve durch curve fitting Algorithmen glätten. Jedoch können einige Verbesserungen in der Zeichnung in messbare Verbesserung der Qualität führen. Here ist ein Beispiel dafür.

Eraser Steuer

Wenn Sie die Hintergrundfarbe wissen Sie, dass als Pinselfarbe verwenden können, einen Radiergummi Gefühl zu geben. wenn Sie nicht über den Hintergrund kennen, können Sie

CGContextSetBlendMode(context, kCGBlendModeClear); 

Undo/Redo verwenden

können Sie NSUndoManager verwenden.

Verwandte Themen