Advance text rendering in i os

Preview:

DESCRIPTION

 

Citation preview

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

Sohail Mohabbat Ali | iOS Mentor

• UIKit

• Core Graphics/Quartz

• Core Text

Advance text Rendering in iOS

Text Rendering in iOS Cont..

Sohail Mohabbat Ali | iOS Mentor

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.

Advance text Rendering in iOS

Text Rendering in iOS Cont..

Sohail Mohabbat Ali | iOS Mentor

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.

Advance text Rendering in iOS

Text Rendering in iOS Cont..

Sohail Mohabbat Ali | iOS Mentor

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.

Advance text Rendering in iOS

Back Ground

Sohail Mohabbat Ali | iOS Mentor

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

Advance text Rendering in iOS

Background

Sohail Mohabbat Ali | iOS Mentor

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

Advance text Rendering in iOS

Why Core Text ?

Sohail Mohabbat Ali | iOS Mentor

• 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

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

• 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

Advance text Rendering in iOS

How to do it ?

Sohail Mohabbat Ali | iOS Mentor

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;

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

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);

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

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);

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

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);

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

Step 5: Don’t forget to release them

Release everything you created with CGRelease.

CFRelease(attrString);

CFRelease(framesetter);

CFRelease(frame);

CFRelease(path);

Advance text Rendering in iOS

What is easy with Core Text

Sohail Mohabbat Ali | iOS Mentor

Step 5: Don’t forget to release them

Release everything you created with CGRelease.

CFRelease(attrString);

CFRelease(framesetter);

CFRelease(frame);

CFRelease(path);

Advance text Rendering in iOS

How to it ?

Sohail Mohabbat Ali | iOS Mentor

CGContextSetTextMatrix(context, CGAffineTransformIdentity);

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

CGContextScaleCTM(context, 1.0, -1.0);

Advance text Rendering in iOS

Writing on Shapes

Sohail Mohabbat Ali | iOS Mentor

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);

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

Sohail Mohabbat Ali | iOS Mentor

With the help of function

we can format different chunks

of strings with different

attributes

Recommended