将NSString变成贝塞尔曲线

将NSString变成贝塞尔曲线

https://github.com/aderussell/string-to-CGPathRef

 

NSString中的字符串是可以通过CoreText框架将其转换成贝塞尔曲线的.

源码:

//
//  RootViewController.m
//  StringPath
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "RootViewController.h"
#import "UIBezierPath+TextPaths.h"
#import "FontPool.h"
#import "YXGCD.h"

@interface RootViewController ()

@property (nonatomic, strong) GCDTimer *timer;

@end

@implementation RootViewController

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.view.backgroundColor = [UIColor blackColor];

    // 注册字体
    [FontPool registerFont:bundleFont(@"新蒂小丸子体.ttf")
                  withName:@"新蒂小丸子体"];

    // 获取形状的layer
    CAShapeLayer *line1 = [CAShapeLayer new];
    line1.frame = CGRectMake(0, 0, 200, 200);
    line1.fillColor = [UIColor clearColor].CGColor;
    line1.strokeColor = [UIColor blackColor].CGColor;
    line1.strokeStart = 0.f;
    line1.strokeEnd   = 1.f;
    line1.lineWidth   = 1.f;

    // 从string上获取到CGPath
    line1.path = [UIBezierPath pathFromString:@"游贤明"
                                     WithFont:[UIFont fontWithName:CUSTOM_FONT(@"新蒂小丸子体", 0)
                                                              size:60.f]].CGPath;
    // 让文字按照正常的顺序显示
    line1.bounds = CGPathGetBoundingBox(line1.path);
    line1.geometryFlipped = YES;

    // 设置颜色渐变layer
    CAGradientLayer *colorLayer = [CAGradientLayer layer];
    colorLayer.frame = CGRectMake(0, 0, 200, 200);

    // 设置遮罩
    colorLayer.mask = line1;
    colorLayer.colors = @[(id)[UIColor redColor].CGColor,
                          (id)[UIColor cyanColor].CGColor];
    colorLayer.position = self.view.center;
    [self.view.layer addSublayer:colorLayer];

    // 动画事件
    _timer = [[GCDTimer alloc] initInQueue:[GCDQueue mainQueue]];
    [_timer event:^{
        line1.strokeEnd = arc4random()%100/100.f;
        colorLayer.colors = @[(id)[UIColor colorWithRed:arc4random()%255/255.f
                                                  green:arc4random()%255/255.f
                                                   blue:arc4random()%255/255.f
                                                  alpha:1].CGColor,
                              (id)[UIColor colorWithRed:arc4random()%255/255.f
                                                  green:arc4random()%255/255.f
                                                   blue:arc4random()%255/255.f
                                                  alpha:1].CGColor,
                              (id)[UIColor colorWithRed:arc4random()%255/255.f
                                                  green:arc4random()%255/255.f
                                                   blue:arc4random()%255/255.f
                                                  alpha:1].CGColor,
                              (id)[UIColor colorWithRed:arc4random()%255/255.f
                                                  green:arc4random()%255/255.f
                                                   blue:arc4random()%255/255.f
                                                  alpha:1].CGColor,
                              (id)[UIColor colorWithRed:arc4random()%255/255.f
                                                  green:arc4random()%255/255.f
                                                   blue:arc4random()%255/255.f
                                                  alpha:1].CGColor];
    } timeInterval:NSEC_PER_SEC];
    [_timer start];
}

@end

效果:

核心代码:

 

 

附录:

http://stackoverflow.com/questions/7573383/how-to-create-a-multiline-string-or-multiline-label-as-a-cgpath-in-ios

时间: 2024-09-30 01:11:15

将NSString变成贝塞尔曲线的相关文章

[控件] 将字符串转换成贝塞尔曲线并执行动画

将字符串转换成贝塞尔曲线并执行动画 部分开源代码支持: https://github.com/aderussell/string-to-CGPathRef 效果: 源码: // // ShapeWordView.h // PathWord // // Created by XianMingYou on 15/3/6. // Copyright (c) 2015年 XianMingYou. All rights reserved. // #import <UIKit/UIKit.h> #impo

IOS贝塞尔曲线圆形进度条和加载动画

做项目让做一个加载动画,一个圈圈在转中间加一个图片,网上有好多demo,这里我也自己写了一个,中间的图片可加可不加.其中主要用到贝塞尔曲线.UIBezierPath是对CGContextRef的进一步封装,不多说直接上代码: #import <UIKit/UIKit.h> @interface CircleLoader : UIView //进度颜色 @property(nonatomic, retain) UIColor* progressTintColor ; //轨道颜色 @proper

IOS用CGContextRef画各种图形(文字、圆、直线、弧线、矩形、扇形、椭圆、三角形、圆角矩形、贝塞尔曲线、图片)

首先了解一下CGContextRef: An opaque type that represents a Quartz 2D drawing environment. Graphics Context是图形上下文,可以将其理解为一块画布,我们可以在上面进行绘画操作,绘制完成后,将画布放到我们的view中显示即可,view看作是一个画框. 自己学习时实现的demo,希望对大家有帮助,具体的实现看代码,并有完美的注释解释,还有一些对我帮助的博文供大家参考.都在代码里面. 看一下demo效果图先: 自

Android自定义View之使用贝塞尔曲线实现流量进度条

第一次写带图片的博客,多少还是有点紧张,效果不好,请将就着看,前面的图是今天要写的控件的效果图,元素不多,分别是一个按钮和一个自定义的控件. 在此以前,我看过许多的书,比如<Android群英传>.<第一行代码>等,也看了很多大神的博客,但是即便是这样,当我看到这么多代码的时候,一直都没有真正的动手去敲过这些代码,以至于我总是觉得自定义View是一个多么高深莫测的技术,我们这些小白是难以触及的,但是当昨晚看了一篇鸡汤之后,觉得人还是要学会专注,要耐得住寂寞,要沉得住气.所以在未来的

Delphi GDI+学习记录(16): 贝塞尔曲线

//画贝塞尔曲线 var g: TGPGraphics; p: TGPPen; begin g := TGPGraphics.Create(Canvas.Handle); p := TGPPen.Create(MakeColor(255,0,0),2); g.DrawBezier(p, 11,11, 88,333, 99,0, 222,111); {参数是画笔与 4 个点的坐标} p.Free; g.Free; end; //使用 TGPPoint 或 TGPPointF var g: TGPG

使用canvas绘制贝塞尔曲线

 1.二次贝塞尔曲线 quadraticCurveTo(cpx,cpy,x,y) //cpx,cpy表示控制点的坐标,x,y表示终点坐标: 数学公式表示如下: 二次方贝兹曲线的路径由给定点P0.P1.P2的函数B(t)追踪: 代码实例:   代码如下: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canvas直线</title> <m

HTML5 Canvas中使用路径描画二阶、三阶贝塞尔曲线

  在HTML5 Canvas中,可以用以下方法描画三阶和二阶的贝塞尔曲线: 代码如下: context.bezierCurveTo(cp1x, cp1y, cp2x, cp2y, x, y) context.quadraticCurveTo(cpx, cpy, x, y) 贝塞尔曲线是在二维平面上由一个"起始点",一个"结束点",以及一个或多个"控制点"定义的曲线.普通的三阶贝塞尔曲线使用两个控制点,而二阶曲线则只使用一个控制点. 要描画二阶贝

用html5的canvas画布绘制贝塞尔曲线完整代码

  html5的canvas很强大利用其画布可轻松绘制贝塞尔曲线,为大家以后使用方便,特于此分享实现代码,有此需求的朋友可以参考下 代码如下:   <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w

AE贝塞尔曲线制作弹性动画

  在使用贝塞尔曲线制作弹性动画前我们先来了解贝塞尔曲线实现原理,来理解什么是符合物理运动规律的动画效果 Android L开始在动效实现方法上有了飞跃提升,散乱的动画效果主要是没有统一的理论支撑,终于在android L之后贝塞尔曲线和SVG动画的普遍使用,使得android原生系统的动效设计成为宣传的一大亮点. 这里重点说一下贝塞尔曲线.很多人一听起来觉得是一个特别专业的词语,其实不然,学过设计或有绘图软件基础的同学接下来都能理解贝塞尔曲线的原理. 在百度百科里面的解释是:"贝赛尔"