so erhalten Sie CGContextRef von UIView oder UIWindow für debugging außerhalb der draw-Methode?

[Dies ist mein Erster Beitrag hier (aber ich habe gestöbert Antworten viele Male; vielen Dank an alle für eine sehr nützliche Seite). Wenn ich Begehen großer Sünden mit diesem post, bitte vergib mir und Stelle mich in die richtige Richtung.]

Ich versuche zu Debuggen, einige komplizierte startup-code in meine iPhone-Anwendung; ich wirklich brauchen, um zu zeichnen, einige Bilder zu machen-debugging weitere aufschlussreiche und radikal reduzieren debug Langeweile.

Den Zustand, den ich zeichnen müssen nicht wirklich existieren, als ein model-Objekt; es ist etwas transient während der Initialisierung. Besonders möchte ich in der Lage zu ziehen, ein bisschen Staat zu einer Zeit, anstatt alles in einem großen Bild (um mir zu helfen, zu sehen, welche Komponenten sind richtig/falsch). In meinem Fall gibt es viele potenzielle überschneidung Zeug und ein einzelnes Bild kann nicht leicht, eindeutig anzeigen, was Los ist.

Erstellen einer statischen Sichtweise, die zieht, um den Bildschirm mit der normalen Zeichnung-Architektur möglich sein könnte, wenn ich einen speziellen debug-Modus, und zusätzliche Steuerelemente zum navigieren /markieren /zeichnen-Komponenten, aber es erfordert eine Menge von unnatürlichen Gerüst, und ist nicht, IMO, den richtigen Weg zu Debuggen mein problem.

So, was ich hoffe, zu tun ist:

  1. bekommen, oder erstellen Sie eine entsprechende CGContextRef
  2. ziehen Sie
  3. Spülen Sie es auf dem Bildschirm sofort
  4. warten, für einige Eingaben vom Benutzer, die nicht die UIEvents
  5. 1-4 wiederholen viele Male

Punkt 4 scheint sich fast unmöglich (gibt es eine Möglichkeit, etwas zu bekommen wie einfache C-oder C++ - console-I/O-arbeiten auf dem iPhone, oder dem iPhone-simulator?), also ich habe bis auf für heute; ich werde zufrieden mit dem Xcode debugger stoppen zwischen Zeichenoperationen.

Aber mehr von Interesse ist, wie man eine CGContextRef außerhalb einer UIView draw-Methode, in denen man die debug-Ausgabe. Caching-ein bislang gültigen Kontext, auch wenn es möglich wäre in meiner situation (nicht möglich, da ich das Debuggen auf app startup), scheint nicht zu funktionieren. Es scheint, als ob Zusammenhänge können neu angelegt werden, für jede Zeichnung, die Bedienung, die mir auffällt, als dass eine Menge Aufwand; ich hätte angenommen, dass ein UIWindow, und vielleicht ein UIView, gespeichert und können zu einem Verweis auf eine entsprechende Zeichnung Kontext. Scheint, dass ich falsch sein muss (aber wenn nicht, wie bekomme ich einen Rahmen aus einer Ansicht oder Fenster? Ich habe gefunden keine Methoden für diese).

So, wenn ich eine Zeichnung erstellen Kontext, wie mache ich es? Ich denke, dass ich wirklich nicht ganz verstehen, was genau ist miteinander verbunden in einem Zusammenhang: inwieweit weiß er über Sie und binden Sie an einige spezifische Anzeige-Ausgabe-Gerät? Wie kann ich kontrollieren, welcher Teil des Bildschirms ein Kontext-Karten zu? Es scheint sehr wenige Möglichkeiten, einen Kontext schaffen, und Sie scheinen nicht, um eine solche Kontrolle. UIGraphicsBeginImageContext scheint die einzige routine, die mir dabei helfen können, und ich sehe nicht, wie das erstellen und zeichnen in einem, nur, um einen CGImage als Ergebnis nützlich sein wird; wie kann ich das resultierende Bild auf dem Bildschirm?

Ich nicht überrascht, ich bin verwirrt über einige grundlegende Dinge im Zusammenhang zu CG-Kontexte. Ich hoffe, diese Frage ist nicht so einfach und offensichtlich, daß ich dir lästig sein, jedem, der es liest, aber wenn ich komplett verpasst, die richtige Dokumentation, ich wäre sehr dankbar für ein paar Hinweise.

Dank für deine geistige Bandbreite, und jede Hilfe. -jar

  • Kleine Nachtrag: CGBitmapContextCreate scheint nicht zu helfen, mich nicht mehr als UIGraphicsBeginImageContext / UIGraphicsEndImageContext tun. Alle meine Lektüre über die Quartz 2D auf dem iPhone (oder auch Mac OS X) darauf hin, dass es keine Möglichkeit gibt, zu zeichnen, um den Bildschirm außerhalb ein UIView der drawRect-Methode. Ich nehme an, dies bezieht sich auf die Optimierung der Leistung, versteckt die Komplexität der CGContext Schöpfung, oder die Entwickler ziehen in den Architektur-sanktioniert Weg. Ich hoffe immer noch, ich bin etwas fehlt.
  • sobald Sie erstellt haben Ihre Rahmen können Sie speichern Sie es als Bild, dann if (debug)[self presentModalViewController:specialDebugViewController]; enthält die UIImageView... nicht viel, Gerüst, wie du sagst.
  • Alle Zeichnung zu sein scheint, vermittelt durch eine CALayer. Eine Schicht hat einen zugeordneten Kontext (und vice-versa; CAContext hat eine layer - Eigenschaft). UIWindow hat eine CAContextImpl Instanz in seinem _layerContext ivar. Versucht zu ziehen, um zu solch einem Kontext könnte es noch sehen Sie die Zeichnung in einem ungültigen Kontext. Ich sehe kein äquivalent zu den desktop - -lockFocus / -lockFocusIfCanDraw Methoden, die ermöglichen würden Sie erzwingen, dass ein Fenster-Kontext gültig ist.
InformationsquelleAutor jarFlooby | 2010-07-08
Schreibe einen Kommentar