iOS值String動態書寫

來源:互聯網
上載者:User

標籤:getattr   分享   fork   param   ica   nil   gem   tab   line   

/** String動畫書寫出來 @param string 要寫的字 @param view 父視圖 @param ui_font 字型大小 @param color 字型顏色 */- (void)createAnimationLayerWithString:(NSString*)string andView:(UIView *)view andFont:(UIFont*)ui_font andStrokeColor:(UIColor*)color{    CTFontRef font =CTFontCreateWithName((CFStringRef)ui_font.fontName,                                         ui_font.pointSize,                                         NULL);    CGMutablePathRef letters = CGPathCreateMutable();        //這裡設定畫線的字型和大小    NSDictionary *attrs = [NSDictionary dictionaryWithObjectsAndKeys:                           (__bridge id)font, kCTFontAttributeName,                           nil];    NSAttributedString *attrString = [[NSAttributedString alloc] initWithString:string                                                                     attributes:attrs];    CTLineRef line = CTLineCreateWithAttributedString((CFAttributedStringRef)attrString);    CFArrayRef runArray = CTLineGetGlyphRuns(line);        for (CFIndex runIndex = 0; runIndex < CFArrayGetCount(runArray); runIndex++)    {        CTRunRef run = (CTRunRef)CFArrayGetValueAtIndex(runArray, runIndex);        CTFontRef runFont = CFDictionaryGetValue(CTRunGetAttributes(run), kCTFontAttributeName);                for (CFIndex runGlyphIndex = 0; runGlyphIndex < CTRunGetGlyphCount(run); runGlyphIndex++)        {            CFRange thisGlyphRange = CFRangeMake(runGlyphIndex, 1);            CGGlyph glyph;            CGPoint position;            CTRunGetGlyphs(run, thisGlyphRange, &glyph);            CTRunGetPositions(run, thisGlyphRange, &position);                        CGPathRef letter = CTFontCreatePathForGlyph(runFont, glyph, NULL);            CGAffineTransform t = CGAffineTransformMakeTranslation(position.x, position.y);            CGPathAddPath(letters, &t, letter);            CGPathRelease(letter);        }    }        CAShapeLayer *pathLayer = [CAShapeLayer layer];    pathLayer.frame = CGRectMake(0, 0, view.frame.size.width, view.frame.size.height );    pathLayer.bounds = CGPathGetBoundingBox(letters);    pathLayer.geometryFlipped = YES;    pathLayer.path = letters;    pathLayer.strokeColor = [color CGColor];    pathLayer.fillColor = nil;    pathLayer.lineWidth = 1.0f;    pathLayer.lineJoin = kCALineJoinBevel;    [view.layer addSublayer:pathLayer];        CABasicAnimation *pathAnimation = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];    pathAnimation.duration = 5.0;    pathAnimation.fromValue = [NSNumber numberWithFloat:0.0f];    pathAnimation.toValue = [NSNumber numberWithFloat:1.0f];    [pathLayer addAnimation:pathAnimation forKey:@"strokeEnd"];        CGPathRelease(letters);    CFRelease(font);    CFRelease(line);}

 

iOS值String動態書寫

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.