CGContextSelectFont and CGContextShowTextAtPoint in iOS 7

CGContextSelectFont and CGContextShowTextAtPoint are deprecated in iOS 7. What are the equivalents in C?

All the answers I've seen give Objective-C equivalents (e.g. NSString methods), but I work in C ++ files.

+6
source share
1 answer

Here is the solution. These features are deprecated in favor of the body text. He is much more advanced, but takes time to understand. This sample draws "Hello World!" using courier font.

- (void)drawRect:(CGRect)rect { CGContextRef context = UIGraphicsGetCurrentContext(); CGContextSaveGState(context); CFStringRef font_name = CFStringCreateWithCString(NULL, "Courier", kCFStringEncodingMacRoman); CTFontRef font = CTFontCreateWithName(font_name, 36.0, NULL); CFStringRef keys[] = { kCTFontAttributeName }; CFTypeRef values[] = { font }; CFDictionaryRef font_attributes = CFDictionaryCreate(kCFAllocatorDefault, (const void **)&keys, (const void **)&values, sizeof(keys) / sizeof(keys[0]), &kCFTypeDictionaryKeyCallBacks, &kCFTypeDictionaryValueCallBacks); CFRelease(font_name); CFRelease(font); int x = 10; int y = 10; const char *text = "Hello World!"; CFStringRef string = CFStringCreateWithCString(NULL, text, kCFStringEncodingMacRoman); CFAttributedStringRef attr_string = CFAttributedStringCreate(NULL, string, font_attributes); CTLineRef line = CTLineCreateWithAttributedString(attr_string); CGContextSetTextPosition(context, x, y); // Core Text uses a reference coordinate system with the origin on the bottom-left // flip the coordinate system before drawing or the text will appear upside down CGContextTranslateCTM(context, 0, self.bounds.size.height); CGContextScaleCTM(context, 1.0, -1.0); CTLineDraw(line, context); CFRelease(line); CFRelease(string); CFRelease(attr_string); CGContextRestoreGState(context); } 

enter image description here

+6
source

Source: https://habr.com/ru/post/956809/


All Articles