iOS实现文字转化成彩色文字图片

本文写了个将文字转化为多彩图片的功能,输入文字将文字转化为彩色的文字图片,可选择不同的字体,渐变,先看看效果。

实现主要用CAGradientLayer渐变,先看看上部展示实现代码:

-(void)setupContentView
{
 UIView *contentView = [[UIView alloc] initWithFrame:CGRectMake(0, 44, ScreenWidth, ScreenHight - 44 -300)];
 [self.view addSubview:contentView];
 UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(tapGestureAction:)];
 [contentView addGestureRecognizer:tapGesture];
 self.topContentView = contentView;
 self.topContentView.backgroundColor = [UIColor clearColor];

 UILabel *label = [[UILabel alloc] init];
 label.numberOfLines = 0;
 label.text = @"ABC";
 label.frame = [self calculateContextLabelFrameWithTitle:@"ABC"];
 label.center = CGPointMake(contentView.bounds.size.width / 2, contentView.bounds.size.height / 2);
 label.font = [UIFont fontWithName:self.fontNameArray[0] size:25];
 label.textAlignment = NSTextAlignmentCenter;
 [contentView addSubview:label];
 label.backgroundColor = [UIColor clearColor];
 self.contentLabel = label;

 self.gradientLayer = [CAGradientLayer layer];
 self.gradientLayer.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
 self.gradientLayer.backgroundColor = [UIColor clearColor].CGColor;
 self.gradientLayer.startPoint = CGPointMake(0,0.5);
 self.gradientLayer.endPoint = CGPointMake(1,0.5);
 self.gradientLayer.colors = self.grandentArr[0];
 [contentView.layer addSublayer:self.gradientLayer];
 self.gradientLayer.mask = self.contentLabel.layer;
 self.contentLabel.frame = self.gradientLayer.bounds;
}

当输入的文字改变时,重新计算 self.gradientLayer的frame

-(void)textFieldTextChange:(NSNotification*)notice
{
 self.contentLabel.text = self.textField.text;
 [self reCalculateGradientLayerFrame];
}

下部分的实现代码:

-(void)setupBottomView
{
 UIView *bottomView =[[UIView alloc] initWithFrame:CGRectMake(0, ScreenHight - 300, ScreenWidth, 300)];
 bottomView.backgroundColor = JGCOLOR(222, 222, 222);
 [self.view addSubview:bottomView];
 self.bottomContentView = bottomView;

 UIView *textContentView = [[UIView alloc] init];
 textContentView.frame = CGRectMake(0, 0, bottomView.bounds.size.width, 50);
 [bottomView addSubview:textContentView];
 textContentView.backgroundColor = JGCOLOR(55, 44, 16);

 UITextField *textField = [[UITextField alloc] init];
 textField.borderStyle = UITextBorderStyleRoundedRect;
 textField.frame = CGRectMake(10, 5, textContentView.bounds.size.width - 20, textContentView.bounds.size.height - 10);
 [textContentView addSubview:textField];
 self.textField = textField;

 CGFloat orgY = 60;
 CGFloat orgx = 10;
 CGFloat space = 10;
 CGFloat width = (ScreenWidth - orgx * 2 - 3 * space) / 4;
 CGFloat height = 35;

 for (int i = 0; i < 16; i++) {
  UIView *vw = [[UIView alloc] initWithFrame:CGRectMake(orgx + (i % 4) * width + (i % 4) * space, orgY + (i / 4) * height + (i / 4) * space, width, height)];
  vw.backgroundColor = [UIColor clearColor];
  vw.tag = i + 1;
  [self.bottomContentView addSubview:vw];

  UITapGestureRecognizer *tapGesture = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(viewTap:)];
  [vw addGestureRecognizer:tapGesture];

  UILabel *label = [[UILabel alloc] initWithFrame:vw.bounds
       ];
  label.textAlignment = NSTextAlignmentCenter;
  label.text = @"ABC";
  label.frame = vw.bounds;
  label.font = [UIFont fontWithName:self.fontNameArray[i % 4] size:25];
  label.backgroundColor = [UIColor clearColor];
  [vw addSubview:label];

  CAGradientLayer *grandient = [CAGradientLayer layer];
  grandient.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, label.frame.size.width, label.frame.size.height);
  grandient.backgroundColor = [UIColor clearColor].CGColor;
  grandient.startPoint = CGPointMake(0,0.5);
  grandient.endPoint = CGPointMake(1,0.5);
  grandient.colors = self.grandentArr[i / 4];
  [vw.layer addSublayer:grandient];
  grandient.mask = label.layer;
  label.frame = grandient.bounds;
 }
}

将文字转化为图片的代码:

-(void)getTitleImg
{
 UIGraphicsBeginImageContext(self.topContentView.frame.size);
 CGContextRef context = UIGraphicsGetCurrentContext();

 if ([[UIDevice currentDevice].systemVersion floatValue] >= 7.0) {
  [self.topContentView drawViewHierarchyInRect:self.topContentView.frame afterScreenUpdates:YES];
 }
 else
 {
  [self.topContentView.layer renderInContext:context];
 }

 UIImage *img = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

 CGImageRef newImgRef = CGImageCreateWithImageInRect(img.CGImage, CGRectMake(self.gradientLayer.frame.origin.x, self.gradientLayer.frame.origin.y + 44, self.gradientLayer.frame.size.width, self.gradientLayer.frame.size.height));

 UIGraphicsBeginImageContextWithOptions(self.gradientLayer.frame.size, NO, [UIScreen mainScreen].scale);
 context = UIGraphicsGetCurrentContext();

 CGContextTranslateCTM(context, 0, self.gradientLayer.frame.size.height);
 CGContextScaleCTM(context, 1, -1);

 CGContextDrawImage(context, CGRectMake(0, 0, self.gradientLayer.frame.size.width, self.gradientLayer.frame.size.height), newImgRef);
 UIImage *newImg = UIGraphicsGetImageFromCurrentImageContext();
 UIGraphicsEndImageContext();

 ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
 [library toolWriteImageToSavedPhotosAlbum:newImg.CGImage metadata:nil completionBlock:^(NSURL *assetURL, NSError *error) {

  if (error) {
   JGLog(@"写入出错");
  }
 } groupName:@"相册名称"];

}

核心代码如上,主要运用到了CAGradientLayer,截图,裁图的方法。
以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • iOS实现带文字的圆形头像效果

    下面就来实现一下这种效果   圆形头像的绘制 先来看一下效果图 分析一下: 1.首先是需要画带有背景色的圆形头像 2.然后是需要画文字 3.文字是截取的字符串的一部分 4.不同的字符串,圆形的背景色是不一样的 5.对于中英文同样处理,英文的一个字符和中文的一个汉字同样算作一个字符 6.文字总是居中显示 好 有了这样几点 我们就可以开始画图了 看一下最终实现的效果图 首先 ,我们需要自定义一个view当做自定义头像,在view的drawRect方法中进行图像的绘制 @interface Round

  • iOS开发中Quartz2D控制圆形缩放和实现刷帧效果

    Quartz2D简要回顾 一.什么是Quartz2D Quartz 2D是⼀个二维绘图引擎,同时支持iOS和Mac系统 Quartz 2D能完成的工作: 绘制图形 : 线条\三角形\矩形\圆\弧等 绘制文字 绘制\生成图片(图像) 读取\生成PDF 截图\裁剪图片 自定义UI控件 二.Quartz2D在iOS开发中的价值 为了便于搭建美观的UI界面,iOS提供了UIKit框架,⾥⾯有各种各样的UI控件 UILabel:显⽰文字 UIImageView:显示图片 UIButton:同时显示图片和⽂

  • IOS使用progssview仿滴滴打车圆形计时

    实现类似在微信中使用的滴滴打车的progressview,实现效果如图 // // CCProgressView.h // HurricaneConsumer // // Created by wangcong on 15-3-25. // Copyright (c) 2015年 WangCong. All rights reserved. // #import <UIKit/UIKit.h> #import <QuartzCore/QuartzCore.h> /** * 动画开始

  • iOS如何裁剪圆形头像

    本文实例为大家介绍了iOS裁剪圆形头像的详细代码,供大家参考,具体内容如下 - (void)viewDidLoad { [super viewDidLoad]; //加载图片 UIImage *image = [UIImage imageNamed:@"菲哥"]; //获取图片尺寸 CGSize size = image.size; //开启位图上下文 UIGraphicsBeginImageContextWithOptions(size, NO, 0); //创建圆形路径 UIBez

  • iOS应用开发中的文字选中操作控件UITextView用法讲解

    1.创建并初始化 创建UITextView的文件,并在.h文件中写入如下代码: 复制代码 代码如下: #import <UIKit/UIKit.h>        @interface TextViewController : UIViewController <UITextViewDelegate>    {                  UITextView *textView;    }        @property (nonatomic, retain) UITex

  • iOS实现百度外卖头像波浪的效果

    效果演示 百度外卖 波浪效果图: 你需要知道的 CADisplayLink 简单的说就是一定时器,其根本利用刷帧和屏幕频率一样来重绘渲染页面. 其创建方式: CADisplayLink *timer = [CADisplayLink displayLinkWithTarget:self selector:@selector(wave)]; [timer addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes]; C

  • IOS定制属于自己的个性头像

    本文实例介绍了IOS定制属于自己的个性头像的方法,分享给大家供大家参考,具体内容如下 一.效果图 1.将一张图片剪切成圆形 2.在图片周围显示指定宽度和颜色的边框 二.实现思路 1.效果图中主要由不同尺寸的两大部分组成 蓝色的背景区域,尺寸等于图片的尺寸加上边框的尺寸 图片区域,尺寸等于图片的尺寸 2.绘制一个圆形背景区域,用边框颜色填充 3.绘制一个圆形的图片区域,设置不显示超出的部分 三.实现步骤 1.加载需要显示的图片 UIImage *image = [UIImage imageName

  • IOS中一段文字设置多种字体颜色代码

    给定range和需要设置的颜色,就可以给一段文字设置多种不同的字体颜色,使用方法如下: 复制代码 代码如下: [self fuwenbenLabel:contentLabel FontNumber:[UIFont systemFontOfSize:15] AndRange:NSMakeRange(6, 1) AndColor:RGBACOLOR(34, 150, 253, 1)]; 复制代码 代码如下: //设置不同字体颜色 -(void)fuwenbenLabel:(UILabel *)lab

  • IOS实现圆形图片效果的两种方法

    先来看看效果图 ↓ 这个显示效果的做法有很多: 方法一: 使用两张图片, 作为边框的背景图片和中间的图片,然后使用imageView的cornerRadius来做圆, 具体代码如下: backImageView.layer.cornerRadius = backImageView.frame.size.width / 2; backImageView.layer.masksToBounds = YES; frontImageView.layer.cornerRadius = frontImage

  • iOS应用中UILabel文字显示效果的常用设置总结

    创建UIlabel对象 复制代码 代码如下: UILabel* label = [[UILabel alloc] initWithFrame:self.view.bounds]; 设置显示文本 复制代码 代码如下: label.text = @"This is a UILabel Demo,"; 设置文本字体 复制代码 代码如下: label.font = [UIFont fontWithName:@"Arial" size:35]; 设置文本颜色 复制代码 代码如

随机推荐