Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Hallo TextKit!

Hallo TextKit!

German lightning talk I gave about TextKit during Dec'13 CocoaHeads Leipzig meeting.

Max Seelemann

December 04, 2013
Tweet

More Decks by Max Seelemann

Other Decks in Programming

Transcript

  1. H A L L O T E X T K

    I T ! M A X S E E L E M A N N
  2. T E X T A U F I O S

    G E S C H I C H T L I C H E R A B R I S S
  3. H I S T O R I E I O

    S 2 • Einfache Text-Anzeige: UILabel • Einfache Text-Eingabe: UITextField • Eingabe für längere Texte: UITextView
 • Keine Formatierungen, Text-Auswahl, Farben
  4. H I S T O R I E I O

    S 3 • Text-Selektion • Kopieren, Ausschneiden und Einsetzen • Data Detectors: Telefonnummern, Links
  5. H I S T O R I E I O

    S 3 . 2 • CoreText — low-level Textsatz-Framework • portiert von Mac OS X 10.5 • Abfangen der Tastatureingabe: UITextInput-Protokoll
  6. H I S T O R I E I O

    S 4 • Nichts Neues
 
 • WWDC-Anekdote: “yeah… File a radar.”
  7. H I S T O R I E I O

    S 5 • Wieder nichts Neues
 
 • WWDC-Anekdote: “we don’t see a lot of requests…”
  8. H I S T O R I E I O

    S 6 • Formatierter Text in UITextView • Fett, Kursiv, Unterstrichen, Groß, Klein • Kaum anpassbar • System-eigene Text-Selektion für Subklassen von UITextView
  9. H I S T O R I E I O

    S 7 H A L L O T E X T K I T !
  10. F E AT U R E S F E A

    T U R E S , F E A T U R E S , F E A T U R E S
  11. F E AT U R E S K E R

    N I N G • Text-Unterschneidung: bessere Lesbarkeit
  12. F E AT U R E S L I G

    AT U R E N • Spezielle Zeichen für kombinierte Buchstaben
  13. F E AT U R E S B I L

    D E R • Im Text eingebettete Bilder • Können vom Nutzer selektiert und bearbeitet werden
  14. F E AT U R E S S I L

    B E N T R E N N U N G • Automatischer Umbruch: besseres Schriftbild
  15. F E AT U R E S A N PA

    S S B A R K E I T • Komponenten-basiertes System • Delegates und Subklassen erlauben weite Anpassung
  16. F E AT U R E S N E U

    E T E X TAT T R I B U T E • Unterstreichungs- und Durchstreichungsstile: • Doppelt, Dick, Gestrichelt, Gepunktet • Text-Grundlinie verschieben • Hintergrundfarben
  17. F E AT U R E S U N D

    S O N S T N O C H … • Serialisierung von Text mit Attributen • Textstile: systemweit einheitliche Schriften • Einstellbar vom Nutzer (Größe, Fett) • Texteffekte. Ohne Worte.
  18. A U F B A U S T R U

    K T U R , Z U S A M M E N S E T Z U N G , S C H E M A
  19. A U F B A U L AY O U

    T- A B L A U F 1 2 3 4 5 6 NSLayoutManager überwacht NSTextStorage Zeichen in Glyphen übersetzen NSTextContainer bestimmt verfügbaren Bereich Bereiche mit Zeilen füllen Zeilen mit Zeichen füllen: Umbruch, Trennung UITextView invalidieren, NSLayoutManager zeichnet
  20. V E R G L E I C H Z

    U O S X A L L E S G A N Z N E U ?
  21. C O C O A T E X T S

    Y S T E M K L A S S E N Ü B E R S I C H T NSString NSAttributedString NSTextStorage NSLayoutManager NSTextContainer NSTextView NSTypesetter NSGlyphGenerator Cocoa Text System CoreText NSInputManager
  22. NSString NSAttributedString NSTextStorage NSLayoutManager NSTextContainer UITextView TextKit CoreText UITextInput 7.0

    7.0 7.0 3.2 3.2 2.0 3.2 NSString NSAttributedString NSTextStorage NSLayoutManager NSTextContainer NSTextView NSTypesetter NSGlyphGenerator Cocoa Text System CoreText NSInputManager
  23. B E I S P I E L S Y

    N TA X H I G H L I G H T I N G
  24. B E I S P I E L H E

    R A N G E H E N • Farben bestimmt NSTextStorage > ableiten - (NSString *)string; - (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRange *)range; - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str; - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range;
  25. B E I S P I E L N S

    T E X T S T O R A G E A B L E I T E N @implementation TKDHighlightingTextStorage { NSMutableAttributedString *_imp; } - (id)init { self = [super init]; if (self) { _imp = [NSMutableAttributedString new]; } return self; }
  26. B E I S P I E L G E

    T T E R - M E T H O D E N - (NSString *)string { return _imp.string; } - (NSDictionary *)attributesAtIndex:(NSUInteger)location effectiveRange:(NSRange *)range { return [_imp attributesAtIndex:location effectiveRange:range]; }
  27. B E I S P I E L S E

    T T E R - M E T H O D E N - (void)replaceCharactersInRange:(NSRange)range withString:(NSString *)str { [_imp replaceCharactersInRange:range withString:str]; [self edited:NSTextStorageEditedCharacters range:range changeInLength:(NSInteger)str.length - (NSInteger)range.length]; } - (void)setAttributes:(NSDictionary *)attrs range:(NSRange)range { [_imp setAttributes:attrs range:range]; [self edited:NSTextStorageEditedAttributes range:range changeInLength:0]; }
  28. B E I S P I E L T E

    X T S T O R A G E I N S TA L L I E R E N _textStorage = [TKDHighlightingTextStorage new]; [_textStorage addLayoutManager: self.textView.layoutManager];
  29. B E I S P I E L “ S

    Y N TA X ” F E S T L E G E N - (void)processEditing { static NSRegularExpression *iExpression; iExpression = iExpression ?: [NSRegularExpression regularExpressionWithPattern: @"i[\\p{Alphabetic}&&\\p{Uppercase}][\\p{Alphabetic}]+" options:0 error:NULL];
  30. B E I S P I E L “ S

    Y N TA X ” E R K E N N E N NSRange paragaphRange = [self.string paragraphRangeForRange: self.editedRange]; [self removeAttribute:NSForegroundColorAttributeName range:paragaphRange]; [iExpression enumerateMatchesInString:self.string options:0 range:paragaphRange usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop) { [self addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:result.range]; }];
  31. D E M O ? D E M O ?

    D E M O ? D E M O ! D E M O ! D E M O !
  32. D A N K E ! H T T P

    S : / / G I T H U B . C O M / M A C G U R U / T E X T K I T D E M O