Ich habe herausgefunden, dass die Zeit für die Färbung der Saite davon abhängt, wie viele verschiedene NSColors verwendet werden. Wenn ich im folgenden Code nur eine Farbe für die drei Fälle verwende, ist der Textfärbungsprozeß dreimal schneller als in dem Fall, in dem drei verschiedene Farben für diese drei Fälle verwendet werden, jede Farbe für jeden Fall. Warum ? Gibt es eine Möglichkeit, die Färbung für drei verschiedene Farben nicht zu verlangsamen?
%Vor% Aktualisieren
Ich habe eine weitere SCHLECHTE Sache gefunden. Als ich die Farbgebung von NSForegroundColorAttributeName
auf NSBackgroundColorAttributeName
umgestellt habe, ist die Laufzeit deutlich gestiegen - 10 mal. Für 20 000 Zeichen war es für eine Farbe, für NSForegroundColorAttributeName
- 1 Sek., Für NSBackgroundColorAttributeName
- 10 Sek .; wenn drei Farben - 3 und 30 Sekunden entsprechend. Für mich ist es sehr schlechtes Merkmal von Swift !!! Es ist nicht möglich, normale Arbeit mit DNA (ATGC-Sequenz) Färbung zu tun, da die Länge der DNA Tausende von A, T, G, C Zeichen ist!
Aktualisieren In Kommentaren habe ich einen Vorschlag, nur sichtbaren Teil des Textes zu färben. Ich habe diesen Ansatz ausprobiert und es ist viel schlimmer, sogar für kürzere Texte im Vergleich zu dem, was ich in der üblichen Weise gemacht habe. Also, ich hatte NSRange von Text für sichtbaren Teil des Textes und färbte beim Fliegen während des Scrollens, indem ich beim Scrollen Benachrichtigungen verwendete. Es ist ein schlechter Weg.
Das größte Hindernis ist das Auslegen aller dieser attributierten Zeichen in der Textansicht. Die Einfärbung der DNA-Sequenz benötigt nur wenig Zeit. Anstatt einen eigenen Layout-Manager oder eine eigene Textspeicherklasse zu schreiben, können Sie einen Divide-and-Conquer-Ansatz anwenden, indem Sie die Textansicht in Blöcken gleichzeitig kolorieren:
%Vor% Der Trick besteht darin, die Anwendung so ansprechend wie möglich zu gestalten, damit der Benutzer nicht merkt, dass die Dinge immer noch im Hintergrund ausgeführt werden. Mit einem kleinen delay
(& lt; = 0,3 Sekunden) konnte ich meine Maus nicht schnell genug scrollen, um das Ende der Textansicht zu erreichen, bevor alles coloriert wurde (100k Zeichen).
Bei einem 100k-Zeichen-Test dauerte es 0,7 Sekunden, bis die eingefärbte Zeichenfolge zuerst in der Textansicht erschien, anstatt in den 7 Sekunden, wenn ich alles auf einmal machte.
Haben Sie versucht, ein ciColor
anstelle eines Attributs zu verwenden? ciColors
kann mit Text, Bildern und Hintergründen verwendet werden.
Du kannst es so machen:
%Vor%Tags und Links arrays swift nsattributedstring nscolor