我是一个iOS新手。如何使我成为遵循字母表的 UIBezierPath 说“B”。目标是沿着这条路径跟踪触摸。
提前致谢。
CoreText.framework 提供了获取单词路径的方法
见http://www.codeproject.com/Articles/109729/Low-level-text-rendering
Ole Begemann 创建的代码示例。抱歉,我忘记了名为 AnimatedPath 的演示的下载网址。
CGMutablePathRef letters = CGPathCreateMutable();
CTFontRef font = CTFontCreateWithName(CFSTR("Helvetica-Bold"), 72.0f, NULL);
NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:
(id)font, kCTFontAttributeName,
nil];
NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:@"Hello World!"
attributes:attrs];
CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrString);
CFArrayRef runArray = CTLineGetGlyphRuns(line);
// for each RUN
for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++)
{
// Get FONT for this run
CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, runIndex);
CTFontRef runFont = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName);
// for each GLYPH in run
for (CFIndex runGlyphIndex = 0; runGlyphIndex < CTRunGetGlyphCount(run); runGlyphIndex++)
{
// get Glyph & Glyph-data
CFRange thisGlyphRange = CFRangeMake(runGlyphIndex, 1);
CGGlyph glyph;
CGPoint position;
CTRunGetGlyphs(run, thisGlyphRange, &glyph);
CTRunGetPositions(run, thisGlyphRange, &position);
// Get PATH of outline
{
CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL);
CGAffineTransform t = CGAffineTransformMakeTranslation(position.x, position.y);
CGPathAddPath(letters, &t, letter);
CGPathRelease(letter);
}
}
}
CFRelease(line);
UIBezierPath *path = [UIBezierPath bezierPath];
[path moveToPoint:CGPointZero];
[path appendPath:[UIBezierPath bezierPathWithCGPath:letters]];
CGPathRelease(letters);
CFRelease(font);
替换“Hello World!” 用“你需要的词”。
对于 Quartz2D 中的绘图,我使用一个名为 PaintCode ( http://www.paintcodeapp.com/ ) 的 OSX 应用程序。它基本上是一个矢量绘图应用程序,可以生成您所做的绘图的石英代码。它实际上非常棒。有一个类似的应用程序叫做不透明度,但我还没有尝试过。
使用此类应用程序,您可以在背景上使用 B 作为指南,并在其上绘制 BezierPath。完成后,只需复制生成的代码并将其粘贴到您的项目中。
希望能帮助到你。