Typographie to go! 
Benjamin Reimold
About me 
Codenauts GmbH 
www.codenauts.com 
Überall (Stuttgart – Berlin) 
! 
Benjamin Reimold 
benjamin@hockeyapp.net 
@e...
Above all, text must be legible. If users can’t read the words in 
your app, it doesn’t matter how beautiful the typograph...
The Android design language relies on traditional typographic 
tools such as scale, space, rhythm, and alignment with an 
...
Typography is at the heart of the Microsoft design language. Each 
of the Microsoft design principles reinforces the impor...
Der Mensch vor dem Bildschirm wird 
immer nach einem Grund suchen, 
die App nicht benutzen zu „müssen“.
Kickstart: Typographie
Typogra…WAS?!E!NS11!
Schrift 
Das Aussehen von Zeichen und Symbolen 
Font 
Die physische Repräsentation der Schrift 
Glyphe 
Die Darstellung ei...
Display-Schrift
k-Linie H-Linie 
x-Linie Typographie 
Grundlinie p-Linie
Kerning 
Weitere Begriffe 
Ligatur
http://shahirzag.com/post/31387507569/sacrilege-in-helvetica-bold 
Serifen 
Monospace 
Sperrsatz 
Zeilenabstand
This is not a typeface. It’s a tossed salad. Or a four-headed 
Frankenstein. You never know which personality you’ll get. ...
Die neue Roboto 
https://plus.google.com/+googledesign/posts/Gfd7FRskeHm
Wähle die richtige Schrift!
It’s a MONOTYPE to rule them all!
Howto lie down layout 
https://www.flickr.com/photos/superfantastic/65578354
Look, just because I don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone into a glass...
Rechtschreibung, macht sexy. 
Richtige Zeichenwal – ebenfalls´.
Zusammengefasst: 
• Typographie ist wichtig! 
• Schrift - Font - Glyphen 
• Linien, Serifen & Ko. 
• Mit Typographie scher...
Typographie unter iOS
UIWebView 
NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"somePage" 
ofType:@"html"]; 
NSString *htmlString...
Native Typographie 
iOS 3.2 / iOS 4 
CoreText & NSAttributedString 
iOS 6 
UILabel & UITextView support NSAttributedString...
Storyboard
NSHTMLTextDocumentType 
NSDictionary *options = @{NSDocumentTypeDocumentAttribute: 
NSHTMLTextDocumentType}  ; 
NSAttribut...
Markdown!
NSString *markdown = [NSString stringWithContentsOfFile:path 
encoding:NSUTF8StringEncoding 
error:nil]; 
NSString *html =...
Markdown!
DTCoreText
Codenauts töten gerne böse Käfermit HockeyApp.
NSAttributedString 
Codenauts töten gerne böse Käfer 
mit HockeyApp. 
NSString *text = @"Codenauts töten gerne böse Käfer ...
Codenauts töten gerne böse Käfer 
mit HockeyApp. 
[as addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize:...
4 Debugging 
NSRange range = NSMakeRange (0, as.length); 
[as enumerateAttributesInRange: range 
options: 0 
usingBlock: ^...
You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the 
world once and g...
NSParagraphStyleAttributeName 
NSMutableParagraphStyle *generalStyle = [[NSMutableParagraphStyle alloc] 
init]; 
[generalS...
NSParagraphStyleAttributeName 
NSUInteger secondParagraphStart = NSMaxRange([formatted.string 
rangeOfString:@"n" ]); 
NSM...
Dynamic Type 
+ (UIFont *) preferredFontForTextStyle: (NSString *)style 
UIContentSizeCategoryDidChangeNotification 
- (vo...
Geht’s auch dynamisch?! 
https://www.flickr.com/photos/tudor/7305737304
MTStringAttributes 
Codenauts töten gerne böse Käfermit HockeyApp. 
MTStringAttributes *general = [MTStringAttributes new]...
MTStringParser *parser = [MTStringParser sharedParser]; 
[parser setDefaultAttributes:general]; 
[parser addStyleWithTagNa...
TTTAttributedLabel 
- (void) basicFormatting { 
self.tttAttributedLabel.numberOfLines = 0; 
self.tttAttributedLabel.textAl...
CoreText? 
https://www.flickr.com/photos/superfantastic/65578354
You think water moves fast? You 
should see ice. It moves like it has a 
mind. Like it knows it killed the world 
once and...
So, Core-Text. 
Framesetter 
! 
Typesetter 
! 
Line 
! 
Run 
! 
Glyph
// in drawRect: 
// Init context and matrix 
CGContextRef context = UIGraphicsGetCurrentContext(); 
CGContextSetTextMatrix...
Alberner Kram geht auch ;-) 
You think water moves fast? You 
should see ice. It moves like it has a mind. Like it knows i...
TextKit -> Yay!
Alberner Kram geht auch ;-) 
You think water moves fast? You 
should see ice. It moves like it has a mind. Like it knows i...
TextKit 
NSLayoutManager 
eigener NSTextStorage aka „Container für NSAttributedString“ 
NSTextContainer 
Codenauts töten g...
Android
WebView 
HTML.fromHtml(String resource) 
TextView + SpannableStringBuilder 
canvas.drawText(….) ? 
android.text.style
Zusammengefasst: 
• iOS7+ Typographie macht so richtig Spaß 
• NSAttributedString für Schrift & Zeichen 
• TextKit für Lay...
Danke für’s zuhören! 
Codenauts GmbH 
www.codenauts.com 
Überall (Stuttgart – Berlin) 
! 
Benjamin Reimold 
benjamin@hocke...
Typographie to go! @ Mobile Tech Con 2014, Berlin
Typographie to go! @ Mobile Tech Con 2014, Berlin
Typographie to go! @ Mobile Tech Con 2014, Berlin
Nächste SlideShare
Wird geladen in …5
×

Typographie to go! @ Mobile Tech Con 2014, Berlin

814 Aufrufe

Veröffentlicht am

Slides (sorry, German) for my session at "Mobile Technology Conference 2014" in Berlin

Veröffentlicht in: Technologie
0 Kommentare
0 Gefällt mir
Statistik
Notizen
  • Als Erste(r) kommentieren

  • Gehören Sie zu den Ersten, denen das gefällt!

Keine Downloads
Aufrufe
Aufrufe insgesamt
814
Auf SlideShare
0
Aus Einbettungen
0
Anzahl an Einbettungen
11
Aktionen
Geteilt
0
Downloads
0
Kommentare
0
Gefällt mir
0
Einbettungen 0
Keine Einbettungen

Keine Notizen für die Folie

Typographie to go! @ Mobile Tech Con 2014, Berlin

  1. 1. Typographie to go! Benjamin Reimold
  2. 2. About me Codenauts GmbH www.codenauts.com Überall (Stuttgart – Berlin) ! Benjamin Reimold benjamin@hockeyapp.net @elektrojunge elektrojunge.de ! MobileMaultaschen.de
  3. 3. Above all, text must be legible. If users can’t read the words in your app, it doesn’t matter how beautiful the typography is. – Apple Human Interface Guidelines
  4. 4. The Android design language relies on traditional typographic tools such as scale, space, rhythm, and alignment with an underlying grid. Successful deployment of these tools is essential to help users quickly understand a screen of information. – Design Guideline for Android by Google
  5. 5. Typography is at the heart of the Microsoft design language. Each of the Microsoft design principles reinforces the importance of typography. – Guidelines for Typography by Microsoft
  6. 6. Der Mensch vor dem Bildschirm wird immer nach einem Grund suchen, die App nicht benutzen zu „müssen“.
  7. 7. Kickstart: Typographie
  8. 8. Typogra…WAS?!E!NS11!
  9. 9. Schrift Das Aussehen von Zeichen und Symbolen Font Die physische Repräsentation der Schrift Glyphe Die Darstellung eines Schriftzeichens
  10. 10. Display-Schrift
  11. 11. k-Linie H-Linie x-Linie Typographie Grundlinie p-Linie
  12. 12. Kerning Weitere Begriffe Ligatur
  13. 13. http://shahirzag.com/post/31387507569/sacrilege-in-helvetica-bold Serifen Monospace Sperrsatz Zeilenabstand
  14. 14. This is not a typeface. It’s a tossed salad. Or a four-headed Frankenstein. You never know which personality you’ll get. - Stephen Coles (typographica.org)
  15. 15. Die neue Roboto https://plus.google.com/+googledesign/posts/Gfd7FRskeHm
  16. 16. Wähle die richtige Schrift!
  17. 17. It’s a MONOTYPE to rule them all!
  18. 18. Howto lie down layout https://www.flickr.com/photos/superfantastic/65578354
  19. 19. Look, just because I don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone into a glass motherfuckin' house, fuckin' up the way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll kill the motherfucker, know what I'm sayin'?Look, just because I don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone glass motherfuckin' house, fuckin' up the way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll the motherfucker, know what I'm sayin’? The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny evil men. Blessed is he who, in the name of charity and good will, shepherds the weak through the valley of darkness, for he is truly brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furious anger those who attempt to poison and destroy My brothers. And you will know My name is the Lord when I lay My vengeance upon thee. Look, just because I don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone into a glass motherfuckin' house, fuckin' up the way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll kill the motherfucker, know I'm sayin’? You think water moves fast? You should see ice. It moves like it has a mind.Like it knows it killed the world once and got for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking that killed the other two, but it Lorem wasn't. Nature is lethal Ipsum but it doesn't hold a Dolor candle to man. Look, Sic now. We said we'd say it was the snow just because I don't be givin' no man foot massage don't make it right for Marsellus to throw Antwone into a glass motherfuckin' house, fuckin' up the way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll kill the motherfucker, know what I'm sayin'?Look, just because don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone into a glass motherfuckin' house, fuckin' up way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll kill the motherfucker, know what I'm sayin’? The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who, in name of charity and good will, shepherds the weak through the valley of darkness, for he is truly his brother's keeper and the finder lost children. And I will strike down upon thee with great vengeance and furious anger those who would attempt to poison and destroy brothers. And you will know My name is the Lord when I lay My vengeance upon thee. Look, just because I don't be givin' no man a foot massage don't make it right for Marsellus to throw Antwone into a glass motherfuckin' house, fuckin' up the way the nigger talks. Motherfucker do that shit to me, he better paralyze my ass, 'cause I'll kill the motherfucker, know what I'm sayin’? You think water moves fast? You should see ice. It moves like it has a mind.Like it knows it killed the world once and got a taste for murder. After the avalanche, took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it Nature is lethal but it doesn't hold a candle to man.
  20. 20. Rechtschreibung, macht sexy. Richtige Zeichenwal – ebenfalls´.
  21. 21. Zusammengefasst: • Typographie ist wichtig! • Schrift - Font - Glyphen • Linien, Serifen & Ko. • Mit Typographie scherzt man nicht. • „Welchen Font hätten Sie denn gern?“ • Howto layout • Kennsch du Sprache!
  22. 22. Typographie unter iOS
  23. 23. UIWebView NSString *htmlFile = [[NSBundle mainBundle] pathForResource:@"somePage" ofType:@"html"]; NSString *htmlString = [NSString stringWithContentsOfFile:htmlFile encoding:NSUTF8StringEncoding error:nil]; [self.awesomeWebView loadHTMLString:htmlString baseURL:nil];
  24. 24. Native Typographie iOS 3.2 / iOS 4 CoreText & NSAttributedString iOS 6 UILabel & UITextView support NSAttributedString iOS 7 TextKit
  25. 25. Storyboard
  26. 26. NSHTMLTextDocumentType NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType} ; NSAttributedString *stringWithHTMLAttributes = [[NSAttributedString alloc] initWithFileURL:url options:options documentAttributes:nil error:nil]; ! [self.justSomeLabel setAttributedText:stringWithHTMLAttributes];
  27. 27. Markdown!
  28. 28. NSString *markdown = [NSString stringWithContentsOfFile:path encoding:NSUTF8StringEncoding error:nil]; NSString *html = [MMMarkdown HTMLStringWithMarkdown:markdown error:nil]; ! NSDictionary *options = @{NSDocumentTypeDocumentAttribute: NSHTMLTextDocumentType}; ! NSError *error; NSAttributedString *formatted = [[NSAttributedString alloc] initWithData:[html dataUsingEncoding:NSUTF16StringEncoding] options:options documentAttributes:nil error:&error]; ! self.awesomTextView.attributedText = formatted;
  29. 29. Markdown!
  30. 30. DTCoreText
  31. 31. Codenauts töten gerne böse Käfermit HockeyApp.
  32. 32. NSAttributedString Codenauts töten gerne böse Käfer mit HockeyApp. NSString *text = @"Codenauts töten gerne böse Käfer mit HockeyApp.“; ! NSDictionary *attrs = @{ NSFontAttributeName : [UIFont systemFontOfSize:36]}; ! NSMutableAttributedString *as = [[NSMutableAttributedString alloc] initWithString:text attributes:attrs];
  33. 33. Codenauts töten gerne böse Käfer mit HockeyApp. [as addAttribute:NSFontAttributeName value:[UIFont boldSystemFontOfSize: 36] range:[text rangeOfString:@"Codenauts"]]; ! [as addAttribute:NSForegroundColorAttributeName value:[UIColor redColor] range:[text rangeOfString:@"gerne"]]; ! [as addAttribute:NSFontAttributeName value:[UIFont systemFontOfSize:18] range:[text rangeOfString:@"Käfer"]]; ! [as addAttribute:NSBackgroundColorAttributeName value:[UIColor purpleColor] range:[text rangeOfString:@"mit HockeyApp"]]; ! UIFont *awesomeFont = [UIFont fontWithName:@"AmericanTypewriter" size: 27.0f]; ! [as addAttribute:NSFontAttributeName value:awesomeFont range:[text rangeOfString:@"HockeyApp"]]; ! self.awesomeTextView.attributedText = as;
  34. 34. 4 Debugging NSRange range = NSMakeRange (0, as.length); [as enumerateAttributesInRange: range options: 0 usingBlock: ^(NSDictionary *attributes, NSRange range, BOOL *stop) { NSLog (@"range: %@ attributes: %@", NSStringFromRange(range), attributes); }]; 2014-08-31 12:07:23.503 TypographieToGo[5831:367954] range: {37, 9} attributes: { NSBackgroundColor = "UIDeviceRGBColorSpace 0.5 0 0.5 1"; NSFont = "<UICTFont: 0x7fafd41017a0> font-family: "American Typewriter"; font-weight: normal; font-style: normal; font-size: 27.00pt"; }
  35. 35. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who, in the name of charity and good will, shepherds the weak through the valley of darkness, for he is truly his brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furious anger those who would attempt to poison and destroy My brothers. And you will know My name is the Lord when I lay My vengeance upon thee. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man.
  36. 36. NSParagraphStyleAttributeName NSMutableParagraphStyle *generalStyle = [[NSMutableParagraphStyle alloc] init]; [generalStyle setParagraphSpacing:27.0]; [generalStyle setFirstLineHeadIndent:10.0]; [generalStyle setAlignment:NSTextAlignmentJustified]; ! NSMutableAttributedString *formatted = [[NSMutableAttributedString alloc] initWithString:slipsumText attributes:@{NSParagraphStyleAttributeName: generalStyle}];
  37. 37. NSParagraphStyleAttributeName NSUInteger secondParagraphStart = NSMaxRange([formatted.string rangeOfString:@"n" ]); NSMutableParagraphStyle *secondParagraphStyle = [[formatted attribute:NSParagraphStyleAttributeName atIndex:secondParagraphStart effectiveRange:NULL] mutableCopy]; secondParagraphStyle.headIndent += 20.0; secondParagraphStyle.firstLineHeadIndent += 20.0; secondParagraphStyle.tailIndent -= 20.0; ! [formatted addAttribute:NSParagraphStyleAttributeName value:secondParagraphStyle range:NSMakeRange(secondParagraphStart, 1)]; ! self.awesomeTV.attributedText = formatted;
  38. 38. Dynamic Type + (UIFont *) preferredFontForTextStyle: (NSString *)style UIContentSizeCategoryDidChangeNotification - (void)userChangedTextSize:(NSNotification *)notification { self.awesomeLab.font = [UIFont preferredFontForTextStyle:UIFontTextStyleBody]; } @property (nonatomic, readonly) NSString*preferredContentSizeCategory;
  39. 39. Geht’s auch dynamisch?! https://www.flickr.com/photos/tudor/7305737304
  40. 40. MTStringAttributes Codenauts töten gerne böse Käfermit HockeyApp. MTStringAttributes *general = [MTStringAttributes new]; general.font = [UIFont systemFontOfSize:36]; general.textColor = [UIColor redColor]; general.kern = 0.8f;
  41. 41. MTStringParser *parser = [MTStringParser sharedParser]; [parser setDefaultAttributes:general]; [parser addStyleWithTagName:@"codenauts" font:[UIFont boldSystemFontOfSize:36]]; [parser addStyleWithTagName:@"gerne" font:sysFont color:[UIColor redColor]]; [parser addStyleWithTagName:@"bugs" font:[UIFont systemFontOfSize:18]]; [parser addStyleWithTagName:@"mit" font:sysFont color:black backgroundColor:[UIColor purpleColor] strikethrough:NO underline:NO]; [parser addStyleWithTagName:@"HockeyApp" font:[UIFont fontWithName:@"AmericanTypewriter" size:27.0f]]; NSString *markup = @"<codenauts>Codenauts</codenauts> töten <gerne>gerne</ gerne> böse <bugs>Käfer</bugs> <mit>mit <HockeyApp>HockeyApp</HockeyApp></ mit>."; NSAttributedString *attributedString = [[MTStringParser sharedParser] attributedStringFromMarkup:markup];
  42. 42. TTTAttributedLabel - (void) basicFormatting { self.tttAttributedLabel.numberOfLines = 0; self.tttAttributedLabel.textAlignment = NSTextAlignmentLeft; self.tttAttributedLabel.lineBreakMode = NSLineBreakByWordWrapping; self.tttAttributedLabel.backgroundColor = [UIColor clearColor]; self.tttAttributedLabel.textInsets = (UIEdgeInsets){ .left = 10, .top = 10, .right = 10, .bottom = 10 }; } @property (nonatomic, strong) NSDictionary *linkAttributes; NSDictionary *linkAttributes = [NSDictionary dictionaryWithObjectsAndKeys: (__bridge id) fontColor.CGColor, (__bridge NSString *) kCTForegroundColorAttributeName, headerCTFont, (__bridge NSString *) kCTFontAttributeName, @(kCTUnderlineStyleSingle), (__bridge NSString *) kCTUnderlineStyleAttributeName, (__bridge id) paragraphRef, (__bridge id) kCTParagraphStyleAttributeName, NULL]; - (void)attributedLabel:(TTTAttributedLabel *)label didSelectLinkWithURL:(NSURL *)url;
  43. 43. CoreText? https://www.flickr.com/photos/superfantastic/65578354
  44. 44. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man.
  45. 45. So, Core-Text. Framesetter ! Typesetter ! Line ! Run ! Glyph
  46. 46. // in drawRect: // Init context and matrix CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSetTextMatrix(context, CGAffineTransformIdentity); ! CFAttributedStringRef attrString = (__bridge CFTypeRef) self.attributedString; CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString); ! CFArrayRef paths = [self copyPaths]; CFIndex pathCount = CFArrayGetCount(paths); CFIndex charIndex = 0; for(CFIndex pathIndex = 0; pathIndex < pathCount; ++pathIndex) { CGPathRef path = CFArrayGetValueAtIndex(paths, pathIndex); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(charIndex, 0), path, NULL); CTFrameDraw(frame, context); CFRange frameRange = CTFrameGetVisibleStringRange(frame); charIndex += frameRange.length; CFRelease(frame); } CFRelease(paths); CFRelease(framesetter);
  47. 47. Alberner Kram geht auch ;-) You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle
  48. 48. TextKit -> Yay!
  49. 49. Alberner Kram geht auch ;-) You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like UIBezierPath *pathForRoundView = it has a mind. Like it knows it killed the world once and got a taste for murder. After the [self.avalanche, roundView it took us curvePathWithOrigin:a week to climb out. Now, I don't self.know roundView.exactly when center]; we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle to man. You think water moves fast? You should see ice. It moves like it has a mind. Like it knows it killed the world once and got a taste for murder. After the avalanche, it took us a self.awesomeTV.textContainer.exclusionPaths = @[pathForRoundView]; week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. After the avalanche, it took us a week to climb out. Now, I don't know exactly when we turned on each other, but I know that seven of us survived the slide... and only five made it out. Now we took an oath, that I'm breaking now. We said we'd say it was the snow that killed the other two, but it wasn't. Nature is lethal but it doesn't hold a candle
  50. 50. TextKit NSLayoutManager eigener NSTextStorage aka „Container für NSAttributedString“ NSTextContainer Codenauts töten gerne böse Käfermit HockeyApp.
  51. 51. Android
  52. 52. WebView HTML.fromHtml(String resource) TextView + SpannableStringBuilder canvas.drawText(….) ? android.text.style
  53. 53. Zusammengefasst: • iOS7+ Typographie macht so richtig Spaß • NSAttributedString für Schrift & Zeichen • TextKit für Layout • CoreText für die letzten 5%? • <iOS7 NSAttributedString + Yak Shaving • Android: kann Html-style Typographie
  54. 54. Danke für’s zuhören! Codenauts GmbH www.codenauts.com Überall (Stuttgart – Berlin) ! Benjamin Reimold benjamin@hockeyapp.net @elektrojunge elektrojunge.de Fragen?

×