2012-05-15 25 views
10

Tôi là người mới sử dụng iOS. Làm thế nào để làm cho tôi một UIBezierPath mà sau một bảng chữ cái nói "B". Mục tiêu là để theo dõi các chạm trên con đường này.iOS UIBezierPath theo hình dạng của một phông chữ

Xin cảm ơn trước.

+2

Bạn đã nhận được giải pháp cho điều này chưa? –

+0

Hi .. Bạn đã có giải pháp nào chưa? –

Trả lời

0

Đối với bản vẽ trong Quartz2D, tôi sử dụng ứng dụng OSX có tên là PaintCode (http://www.paintcodeapp.com/). Về cơ bản nó là một ứng dụng vẽ vector tạo ra mã thạch anh của bản vẽ bạn làm. Nó thực sự tuyệt vời. Có một ứng dụng tương tự được gọi là Opacity nhưng tôi chưa thử nó.

Với các ứng dụng như vậy, bạn có thể có B trên nền làm hướng dẫn và vẽ BezierPath của bạn lên đó. Một khi bạn đã hoàn thành, chỉ cần sao chép mã được tạo ra và dán nó vào dự án của bạn.

Hy vọng điều đó sẽ hữu ích.

+0

BTW, bạn có thể tải xuống phiên bản demo. Có lẽ điều này có thể đủ cho vấn đề của bạn. – Marcal

7

CoreText.framework cung cấp phương pháp để có được con đường từ

thấy http://www.codeproject.com/Articles/109729/Low-level-text-rendering

mã ví dụ tạo ra bởi Ole Begemann. Xin lỗi, tôi quên url tải xuống cho bản giới thiệu có tên 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); 

thay thế "Hello World!" Bằng "Từ bạn cần".

+0

Xin lưu ý rằng bạn nên đăng các điểm hữu ích của câu trả lời ở đây, trên trang web này, hoặc bài đăng của bạn có nguy cơ bị xóa là ["Không trả lời"] (http://meta.stackexchange.com/q/8259). Bạn vẫn có thể bao gồm liên kết nếu bạn muốn, nhưng chỉ là 'tham chiếu'. Câu trả lời nên tự đứng lên mà không cần liên kết. –

+0

Cảm ơn lời nhắc của bạn – nova

Các vấn đề liên quan