SlideShare a Scribd company logo
Boutique product development company
It is amazing what you can accomplish when you have a client-centric team to deliver outstanding products.
Advance Text Rendering In iOS
      Sohail Mohabbat Ali| iOS Mentor
Advance Text Rendering In iOS
Topics covered in the presentation




     •   Back Ground
     •   Core Text
     •   How to Do It?
     •   How to Fix IT




                                     or
                                          Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Text Rendering in iOS


   •      UIKit

   •      Core Graphics/Quartz

   •      Core Text




                                 Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Text Rendering in iOS Cont..

  UIKit:

  In UIKit you have             and you add a word or a text line on
  the screen by simple Drag-and-Drop in IB, but you cannot do
  many things like strikethrough and custom formatting.




                                                    Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Text Rendering in iOS Cont..

  Core Graphics/Quartz:

  In                            you can do pretty much everything the
  system is capable of, but you need to calculate the position of each
  glyph in your text and draw it on the screen.




                                                    Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Text Rendering in iOS Cont..

  Core Text:

                   lies right between the two! You have complete control over
  position, layout, attributes like color and size, but Core Text takes care
  of everything else for you – from word wrap to font rendering and more.




                                                       Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Back Ground

                                      A tale of two Apples
      • The original Apple development team created “Classic” APIs
                                and

      • The NeXT team created NS* APIs which we later called
          “            ”

      • Since the merge of the two company, solutions like
          and                   were created to close the gap

      • For modern, Unicode-aware text layout, there is                          which
          is still a popular choice for now

                                                            Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Background

                                  More about ATSUI

    • Short for “                                                        ”

                      Like API (OSErr, Fixed, Pascal String, etc.)

    • Fast, robust, powerful, but the API is bit complicate to use

                (for font enumeration and selection) still exists, but ATSUI
        is now                          , no 64-bit support




                                                        Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Why Core Text ?


 • Simpler, Core Foundation style API, much easier to call from
      Cocoa apps

 • Minimize                     between different data formats, improve
      performance (up to 2 times faster according to Apple)

 • Supported behavior (like font traits) closely matches with
      Cocoa Text System




                                                    Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text


 • Lay formatted text down on the screen

 • Fine tune the text’s appearance

 • Add images inside the text content

 • Display data in columns

 • Display text with different transformations




                                                 Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


How to do it ?

                                Step 1: Prepare Attributed String

       • First, you prepare a                      with all the parameters set
         (to the whole string or part of the string):

       NSAttributedString * str = [[NSAttributedString alloc]
               initWithString:@”Hello core text world!”
               attributes:[NSDictionary
               dictionaryWithObjectsAndKeys:
               [UIFont fontWithName:@"Helvetive" size:12.0],
               (NSString *) kCTFontAttributeName]];

          CFAttributedStringRef attrString =
                (CFAttributedStringRef) str;
                                                         Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text

                                Step 2: Create a CTFramesetter
      • Now you can create a central object for Core Text typesetting:
                      , you will use it through the entire layout
        process:


      CTFramesetterRef framesetter =
      CTFramesetterCreateWithAttributedString(attrString);




                                                        Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text


                                Step 3: Create a CGPath

         • Third, you add one or more               (or other shapes) to form
           a complete         :


             CGMutablePathRef path =
                                CGPathCreateMutable();


             CGRect bounds = self.bounds;


             CGPathAddRect(path, NULL, bounds);


                                                         Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text


                                Step 4: Get the Frame

    Use the          and                  to create            (s), then draw it in
       current context

        CGContextRef context = UIGraphicsGetCurrentContext();

        CTFrameRef frame =
             CTFramesetterCreateFrame(framesetter,
                               CFRangeMake(0, 0),
                               path, NULL);

        CTFrameDraw(frame , context);


                                                      Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text


                         Step 5: Don’t forget to release them

 Release everything you created with CGRelease.



  CFRelease(attrString);

  CFRelease(framesetter);

  CFRelease(frame);

  CFRelease(path);


                                                    Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


What is easy with Core Text


                         Step 5: Don’t forget to release them

 Release everything you created with CGRelease.



  CFRelease(attrString);

  CFRelease(framesetter);

  CFRelease(frame);

  CFRelease(path);


                                                    Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


How to                it ?




  CGContextSetTextMatrix(context, CGAffineTransformIdentity);


  CGContextTranslateCTM(context, 0, self.bounds.size.height);


  CGContextScaleCTM(context, 1.0, -1.0);




                                              Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Writing on Shapes

  CGMutablePathRef path = CGPathCreateMutable();



  CTFramesetterRef framesetter =
  CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString);

  CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0,
  [attString length]), path, NULL);

  CFRelease(framesetter);

  CFRelease(path);

  CTFrameDraw(theFrame, context);

  CFRelease(theFrame);
                                                        Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Writing on Shapes (Output)




                                Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Writing on Shapes (Output)




                                Sohail Mohabbat Ali | iOS Mentor
Advance text Rendering in iOS


Playing with NSA Tributed String


  With the help of function




  we can format different chunks
  of strings with different
  attributes




                                   Sohail Mohabbat Ali | iOS Mentor

More Related Content

PDF
iOS 7 SDK特訓班
PDF
Hi performance table views with QuartzCore and CoreText
PDF
Advanced AV Foundation (CocoaConf, Aug '11)
PDF
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
PPT
Javascript and Jquery Best practices
PDF
From YUI3 to K2
PPTX
SenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
PDF
Performance Optimization and JavaScript Best Practices
iOS 7 SDK特訓班
Hi performance table views with QuartzCore and CoreText
Advanced AV Foundation (CocoaConf, Aug '11)
Xitrum Web Framework Live Coding Demos / Xitrum Web Framework ライブコーディング
Javascript and Jquery Best practices
From YUI3 to K2
SenchaCon 2016: Modernizing the Ext JS Class System - Don Griffin
Performance Optimization and JavaScript Best Practices

What's hot (20)

PDF
Solid And Sustainable Development in Scala
PDF
Declarative UI on iOS without SwiftUI (中文)
PDF
Node.js vs Play Framework (with Japanese subtitles)
PDF
Introduction to node.js by Ran Mizrahi @ Reversim Summit
PDF
Seven Versions of One Web Application
PDF
Sling Models Using Sightly and JSP by Deepak Khetawat
PPTX
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
PPTX
Advance JS and oop
PPTX
Mastering the Sling Rewriter
PDF
Intro to JavaScript Testing
PPTX
The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
PPTX
SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...
PPTX
Real World MVC
PDF
Introduction to JavaScript
PPTX
Object Oriented Programing in JavaScript
PPT
jQuery Objects
PDF
Scalable JavaScript Design Patterns
PDF
Building Concurrent WebObjects applications with Scala
PDF
Medium TechTalk — iOS
PPT
The Theory Of The Dom
Solid And Sustainable Development in Scala
Declarative UI on iOS without SwiftUI (中文)
Node.js vs Play Framework (with Japanese subtitles)
Introduction to node.js by Ran Mizrahi @ Reversim Summit
Seven Versions of One Web Application
Sling Models Using Sightly and JSP by Deepak Khetawat
JavaFX 2 and Scala - Like Milk and Cookies (33rd Degrees)
Advance JS and oop
Mastering the Sling Rewriter
Intro to JavaScript Testing
The Grid the Brad and the Ugly: Using Grids to Improve Your Applications
SenchaCon 2016: How to Auto Generate a Back-end in Minutes - Per Minborg, Emi...
Real World MVC
Introduction to JavaScript
Object Oriented Programing in JavaScript
jQuery Objects
Scalable JavaScript Design Patterns
Building Concurrent WebObjects applications with Scala
Medium TechTalk — iOS
The Theory Of The Dom
Ad

Similar to Advance text rendering in i os (20)

PDF
Introducing ios core ml
PPT
Programming iOS in C#
DOCX
Best Apple IOS Training in Chennai | Best Iphone Training in Chennai
PPTX
Enhancedpptfor_SwiftUI_Presentation.pptx
PPTX
Layer architecture of ios (1)
PDF
[CocoaHeads Tricity] Do not reinvent the wheel
PDF
Enhance the Look of Your App With Text Kit
PDF
iOS Development - Offline Class for Jasakomer
PDF
iOS Development Survival Guide for the .NET Guy
PPTX
Final ppt
PDF
Understanding iOS from an Android perspective
PDF
Compose Camp Day 3 PPT.pptx.pdf
PDF
Down With JavaScript!
PPTX
How to add Custom Font to your iOS-based App?
PPTX
Getting started with titanium
PPTX
Getting started with Appcelerator Titanium
PDF
The iOS technical interview: get your dream job as an iOS developer
PDF
Deep Learning in iOS Tutorial
KEY
Real-world Dojo Mobile
Introducing ios core ml
Programming iOS in C#
Best Apple IOS Training in Chennai | Best Iphone Training in Chennai
Enhancedpptfor_SwiftUI_Presentation.pptx
Layer architecture of ios (1)
[CocoaHeads Tricity] Do not reinvent the wheel
Enhance the Look of Your App With Text Kit
iOS Development - Offline Class for Jasakomer
iOS Development Survival Guide for the .NET Guy
Final ppt
Understanding iOS from an Android perspective
Compose Camp Day 3 PPT.pptx.pdf
Down With JavaScript!
How to add Custom Font to your iOS-based App?
Getting started with titanium
Getting started with Appcelerator Titanium
The iOS technical interview: get your dream job as an iOS developer
Deep Learning in iOS Tutorial
Real-world Dojo Mobile
Ad

More from Confiz (20)

PDF
Agile training workshop
PDF
Web services with laravel
PDF
DMAIC-Six sigma process Improvement Approach
PDF
What is UFT? HP's unified functional testing.
PDF
Software testing methods, levels and types
PDF
Sqa, test scenarios and test cases
PDF
Solid principles of oo design
PPTX
Entity framework code first
PDF
Security testing presentation
PDF
Ts seo t ech session
PDF
Learning as a creative professional
PDF
Learning as a creative professional
PDF
Ts archiving
PDF
Ts threading
PDF
Ts android supporting multiple screen
PDF
Ts drupal6 module development v0.2
PDF
Photoshop manners
PDF
Monkey talk
PDF
An insight to microsoft platform
PDF
Ts branching over the top
Agile training workshop
Web services with laravel
DMAIC-Six sigma process Improvement Approach
What is UFT? HP's unified functional testing.
Software testing methods, levels and types
Sqa, test scenarios and test cases
Solid principles of oo design
Entity framework code first
Security testing presentation
Ts seo t ech session
Learning as a creative professional
Learning as a creative professional
Ts archiving
Ts threading
Ts android supporting multiple screen
Ts drupal6 module development v0.2
Photoshop manners
Monkey talk
An insight to microsoft platform
Ts branching over the top

Advance text rendering in i os

  • 1. Boutique product development company It is amazing what you can accomplish when you have a client-centric team to deliver outstanding products.
  • 2. Advance Text Rendering In iOS Sohail Mohabbat Ali| iOS Mentor
  • 3. Advance Text Rendering In iOS Topics covered in the presentation • Back Ground • Core Text • How to Do It? • How to Fix IT or Sohail Mohabbat Ali | iOS Mentor
  • 4. Advance text Rendering in iOS Text Rendering in iOS • UIKit • Core Graphics/Quartz • Core Text Sohail Mohabbat Ali | iOS Mentor
  • 5. Advance text Rendering in iOS Text Rendering in iOS Cont.. UIKit: In UIKit you have and you add a word or a text line on the screen by simple Drag-and-Drop in IB, but you cannot do many things like strikethrough and custom formatting. Sohail Mohabbat Ali | iOS Mentor
  • 6. Advance text Rendering in iOS Text Rendering in iOS Cont.. Core Graphics/Quartz: In you can do pretty much everything the system is capable of, but you need to calculate the position of each glyph in your text and draw it on the screen. Sohail Mohabbat Ali | iOS Mentor
  • 7. Advance text Rendering in iOS Text Rendering in iOS Cont.. Core Text: lies right between the two! You have complete control over position, layout, attributes like color and size, but Core Text takes care of everything else for you – from word wrap to font rendering and more. Sohail Mohabbat Ali | iOS Mentor
  • 8. Advance text Rendering in iOS Back Ground A tale of two Apples • The original Apple development team created “Classic” APIs and • The NeXT team created NS* APIs which we later called “ ” • Since the merge of the two company, solutions like and were created to close the gap • For modern, Unicode-aware text layout, there is which is still a popular choice for now Sohail Mohabbat Ali | iOS Mentor
  • 9. Advance text Rendering in iOS Background More about ATSUI • Short for “ ” Like API (OSErr, Fixed, Pascal String, etc.) • Fast, robust, powerful, but the API is bit complicate to use (for font enumeration and selection) still exists, but ATSUI is now , no 64-bit support Sohail Mohabbat Ali | iOS Mentor
  • 10. Advance text Rendering in iOS Why Core Text ? • Simpler, Core Foundation style API, much easier to call from Cocoa apps • Minimize between different data formats, improve performance (up to 2 times faster according to Apple) • Supported behavior (like font traits) closely matches with Cocoa Text System Sohail Mohabbat Ali | iOS Mentor
  • 11. Advance text Rendering in iOS What is easy with Core Text • Lay formatted text down on the screen • Fine tune the text’s appearance • Add images inside the text content • Display data in columns • Display text with different transformations Sohail Mohabbat Ali | iOS Mentor
  • 12. Advance text Rendering in iOS How to do it ? Step 1: Prepare Attributed String • First, you prepare a with all the parameters set (to the whole string or part of the string): NSAttributedString * str = [[NSAttributedString alloc] initWithString:@”Hello core text world!” attributes:[NSDictionary dictionaryWithObjectsAndKeys: [UIFont fontWithName:@"Helvetive" size:12.0], (NSString *) kCTFontAttributeName]]; CFAttributedStringRef attrString = (CFAttributedStringRef) str; Sohail Mohabbat Ali | iOS Mentor
  • 13. Advance text Rendering in iOS What is easy with Core Text Step 2: Create a CTFramesetter • Now you can create a central object for Core Text typesetting: , you will use it through the entire layout process: CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString(attrString); Sohail Mohabbat Ali | iOS Mentor
  • 14. Advance text Rendering in iOS What is easy with Core Text Step 3: Create a CGPath • Third, you add one or more (or other shapes) to form a complete : CGMutablePathRef path = CGPathCreateMutable(); CGRect bounds = self.bounds; CGPathAddRect(path, NULL, bounds); Sohail Mohabbat Ali | iOS Mentor
  • 15. Advance text Rendering in iOS What is easy with Core Text Step 4: Get the Frame Use the and to create (s), then draw it in current context CGContextRef context = UIGraphicsGetCurrentContext(); CTFrameRef frame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, 0), path, NULL); CTFrameDraw(frame , context); Sohail Mohabbat Ali | iOS Mentor
  • 16. Advance text Rendering in iOS What is easy with Core Text Step 5: Don’t forget to release them Release everything you created with CGRelease. CFRelease(attrString); CFRelease(framesetter); CFRelease(frame); CFRelease(path); Sohail Mohabbat Ali | iOS Mentor
  • 17. Advance text Rendering in iOS What is easy with Core Text Step 5: Don’t forget to release them Release everything you created with CGRelease. CFRelease(attrString); CFRelease(framesetter); CFRelease(frame); CFRelease(path); Sohail Mohabbat Ali | iOS Mentor
  • 18. Advance text Rendering in iOS How to it ? CGContextSetTextMatrix(context, CGAffineTransformIdentity); CGContextTranslateCTM(context, 0, self.bounds.size.height); CGContextScaleCTM(context, 1.0, -1.0); Sohail Mohabbat Ali | iOS Mentor
  • 19. Advance text Rendering in iOS Writing on Shapes CGMutablePathRef path = CGPathCreateMutable(); CTFramesetterRef framesetter = CTFramesetterCreateWithAttributedString((CFAttributedStringRef)attString); CTFrameRef theFrame = CTFramesetterCreateFrame(framesetter, CFRangeMake(0, [attString length]), path, NULL); CFRelease(framesetter); CFRelease(path); CTFrameDraw(theFrame, context); CFRelease(theFrame); Sohail Mohabbat Ali | iOS Mentor
  • 20. Advance text Rendering in iOS Writing on Shapes (Output) Sohail Mohabbat Ali | iOS Mentor
  • 21. Advance text Rendering in iOS Writing on Shapes (Output) Sohail Mohabbat Ali | iOS Mentor
  • 22. Advance text Rendering in iOS Playing with NSA Tributed String With the help of function we can format different chunks of strings with different attributes Sohail Mohabbat Ali | iOS Mentor