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

下面就来实现一下这种效果   圆形头像的绘制

先来看一下效果图

分析一下:

      1、首先是需要画带有背景色的圆形头像

      2、然后是需要画文字

      3、文字是截取的字符串的一部分

      4、不同的字符串,圆形的背景色是不一样的

      5、对于中英文同样处理,英文的一个字符和中文的一个汉字同样算作一个字符

      6、文字总是居中显示

好 有了这样几点 我们就可以开始画图了

看一下最终实现的效果图

首先 ,我们需要自定义一个view当做自定义头像,在view的drawRect方法中进行图像的绘制

@interface RoundHeadView()
@property (nonatomic, copy) NSString *title;//需要绘制的标题
@property (nonatomic, assign) CGFloat colorPoint;//用户后面计算颜色的随机值
//设置文字
- (void)setTitle:(NSString *)title;
@end
@implementation RoundHeadView
-(instancetype)initWithFrame:(CGRect)frame{
  self = [super initWithFrame:frame];
  if (self) {
    self.backgroundColor = [UIColor clearColor];
  }
  return self;
}
@end

首先画一个带有背景颜色的圆形

-(void)drawRect:(CGRect)rect{

  //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画
   CGContextRef context = UIGraphicsGetCurrentContext();
   [self caculateColor];//计算颜色

  /*画圆*/
   CGContextSetRGBFillColor (context,_colorPoint, 0.5, 0.5, 1.0);//设置填充颜色 颜色这里随机设置的,后面会根据文字来计算颜色

  //填充圆,无边框
  CGContextAddArc(context, self.frame.size.width/2.0, self.frame.size.width/2.0, self.frame.size.width/2.0, 0, 2*M_PI, 0); //添加一个圆
  CGContextDrawPath(context, kCGPathFill);//绘制填充
  }

得到了不带文字的圆形头像

接下来 我们来画文字

首先需要计算一下文字的尺寸

将文字设置进来

- (void)setTitle:(NSString *)title{
  _title = [[self subStringWithLendth:2 string:title] copy];
  [self setNeedsDisplay];//调用这个方法 进行重新绘制 view会重新调用drawRect方法
}

截取文字

/**
 截取字符串,截取字符串最开始的两个 汉子和英文一样处理
 @param length 截取的字符长度(汉子和英文同样计算)
 @param string 需要截取的字符串
 @return 返回截取的字符串
 */
-(NSString *)subStringWithLendth:(int)length string:(NSString *)string{

  NSString *copyStr = [string copy];
  NSMutableString *realStr = [[NSMutableString alloc] init];

  for(int i = 0; i < copyStr.length; i++){
    if(length == 0){
      break;
    }
    unichar ch = [copyStr characterAtIndex:0];
    if (0x4e00 < ch && ch < 0x9fff)//如何判断是汉字
    {
      //如果是汉子需要做其他处理 可以在这里做处理
    }
    //若为汉字
    [realStr appendString:[copyStr substringWithRange:NSMakeRange(i,1)]];

    length = length - 1;
  }
  return realStr;
}
/**
 计算文字的尺寸,在绘制图像时,保证文字总是处于图像的正中
 文字的尺寸可以自己计算 这里定义的是 宽度的1/3 我看使用起来比较合适 当然
 你可以自己定义的
 @return 文字的宽高
 */
- (CGSize)caculateLableSize{
  UILabel *lable = [[UILabel alloc] initWithFrame:CGRectZero];
  lable.font = [UIFont fontWithName:@"Arial-BoldMT" size:self.frame.size.width/3.0];
  lable.text = self.title;
  [lable sizeToFit];
  CGSize size = lable.frame.size;
  return size;
}

最后得到了 需要绘制在图像上的title

还需要做一步处理 就是根据文字的拼音或者其他的什么东西 来定义图像的背景色 我这里就用拼音了
首先需要做的是获取拼音

/**
 获取汉子拼音
 @param originalStr 原始中文字符
 @return 汉子的全拼
 */
- (NSString *)pinyin: (NSString *)originalStr{
  NSMutableString *str = [originalStr mutableCopy];
  CFStringTransform(( CFMutableStringRef)str, NULL, kCFStringTransformMandarinLatin, NO);
  CFStringTransform((CFMutableStringRef)str, NULL, kCFStringTransformStripDiacritics, NO);
  return [str stringByReplacingOccurrencesOfString:@" " withString:@""];
}

根据拼音计算颜色,随即一个颜色 这个方法 我自己瞎想的 一个颜色 当然你可以自己定义一个方法来计算颜色

/**
 随机一个颜色
 填充圆形头像的底色
 根据字符的拼音计算出的颜色
 */
- (void)caculateColor{
  if (_title.length == 0) {
    return;
  }
  if (_title.length>1) {
    NSString *firstStr = [_title substringWithRange:NSMakeRange(0,1)];
    NSString *secondStr = [_title substringWithRange:NSMakeRange(1, 1)];
    NSString *firstPinyin = [self pinyin:firstStr];
    NSString *secondPinyin = [self pinyin:secondStr];
    NSUInteger count = firstPinyin.length+secondPinyin.length;
    if (count>10) {
      count-=10;
      self.colorPoint = count/10.0;
    }else{
      self.colorPoint = count/10.0;
    }
  }else{
    NSString *firstStr = [_title substringWithRange:NSMakeRange(0,1)];
    NSString *firstPinyin = [self pinyin:firstStr];
    NSUInteger count = firstPinyin.length;
    self.colorPoint = count/10.0;
  }
}

需要的 我们都处理好了 这下可以直接画文字了 还是在drawRect方法中

-(void)drawRect:(CGRect)rect{

  //一个不透明类型的Quartz 2D绘画环境,相当于一个画布,你可以在上面任意绘画
  CGContextRef context = UIGraphicsGetCurrentContext();
  [self caculateColor];//计算颜色

  /*画圆*/
  CGContextSetRGBFillColor (context,_colorPoint, 0.5, 0.5, 1.0);//设置填充颜色
  //  CGContextSetRGBStrokeColor(context,red,green,blue,1.0);//画笔线的颜色

  //填充圆,无边框
  CGContextAddArc(context, self.frame.size.width/2.0, self.frame.size.width/2.0, self.frame.size.width/2.0, 0, 2*M_PI, 0); //添加一个圆
  CGContextDrawPath(context, kCGPathFill);//绘制填充

  /*写文字*/
  //  CGContextSetRGBFillColor (context, 1, 0, 0, 1.0);//设置填充颜色
  NSDictionary* dic = [NSDictionary dictionaryWithObjectsAndKeys:[UIFont fontWithName:@"Arial-BoldMT" size:self.frame.size.width/3.0], NSFontAttributeName,[UIColor whiteColor],NSForegroundColorAttributeName, nil];
  CGSize size = [self caculateLableSize];
  CGFloat X = (self.frame.size.width-size.width)/2.0;
  CGFloat Y = (self.frame.size.height-size.height)/2.0;
  [self.title drawInRect:CGRectMake(X, Y, self.frame.size.width, self.frame.size.width) withAttributes:dic];
}

测试一下

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 300, 20)];
label.text = @"文字不同,背景颜色也不会相同";
[self.view addSubview:label];
NSArray *strs = @[@"为我",@"样的",@"好啊",@"H在",@"hc",@"2才",@"哈哈",@"打算打算打算的",@"还有人v",@"哈哈"];
for (int i=0; i<10; i++) {
  RoundHeadView *head = [[RoundHeadView alloc] initWithFrame:CGRectMake(30, 100+(40*i), 40, 40)];
  [head setTitle:strs[i]];
  [self.view addSubview:head];
}

总结

好了,到这就大功告成了,大家都学会了吗?希望本文的内容对各位iOS开发者们能有所帮助,如果有疑问大家可以留言交流。谢谢大家对的支持。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索ios
, 设置圆形头像
, 圆形头像
ios实现圆形头像
android实现圆形头像、css实现圆形头像、安卓实现圆形头像、html5 圆形头像实现、ios实现圆形头像,以便于您获取更多的相关知识。

时间: 2024-08-04 00:01:56

iOS实现带文字的圆形头像效果_IOS的相关文章

Android Studio实现带边框的圆形头像

本文实例为大家分享了Android Studio实现带边框的圆形头像的具体代码,供大家参考,具体内容如下 效果显示: (没有边框的) (有边框的) 1.创建自定义ImagView控件 (1).没有边框的 package chenglong.activitytest.pengintohospital.utils; import android.content.Context; import android.graphics.Bitmap; import android.graphics.Bitma

利用Android中BitmapShader制作自带边框的圆形头像_Android

效果如下: BitmapShader 的简单介绍 关于 Shader是什么,Shader的种类有哪几种以及如何使用不属于本文范畴,对这方面不是很了解的同学,建议先去学习一下 Shader 的基本使用. BitmapShader主要的作用就是 通过Paint对象,对 画布进行指定的Bitmap填充,实现一系列效果,可以有以下三种模式进行选择       1.CLAMP - 拉伸,这里拉伸的是图片的最后一个元素,不断地重复,这个效果,在图片比较小,而所要画的面积比较大的时候会比较明显.      

IOS实现左右两个TableView联动效果_IOS

一.先来看看要实现的效果图 二.小解析,可以先看看后面的! 三.实现 tableView联动 主要分两种状况      1.点击 左侧 cell 让右侧 tableView 滚到对应位置      2.滑动 右侧 tableView 让左侧 tableView 滚到对应位置 1.先实现简单的:点击 左侧 cell 让右侧 tableView 滚到对应位置 //MARK: - 点击 cell 的代理方法 - (void)tableView:(UITableView *)tableView didS

iOS开发之路--仿网易抽屉效果_IOS

最终效果图: MainStoryBoard示意图: BeyondViewController.h // // BeyondViewController.h // 19_抽屉效果_仿网易 // // Created by beyond on 14-8-1. // Copyright (c) 2014年 com.beyond. All rights reserved. // #import <UIKit/UIKit.h> #import "LeftTableViewControllerD

IOS代码笔记UIView的placeholder的效果_IOS

本文实例为大家分享了IOS占位符效果,供大家参考,具体内容如下 一.效果图   二.工程图   三.代码RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITextViewDelegate> { UITextView *psTextView; UILabel *pslabel; } @end RootViewController.m #imp

iOS实现动态元素的引导图效果_IOS

前言 最近越来越多的APP,已经抛弃掉第一次进入的3-4页的导入页面,而是另外采取了在功能页面悬浮一个动态效果来展示相应的功能点.这个模块主要是实现app首次进入时显示的动态的引导图,在用户进行右滑或者左滑的时候,屏幕上的一些元素做出相应的隐藏消失以及位置移动. 实现效果: 图片资源来自网络,侵权即删 先来看看是如何使用的,然后再介绍相关的方法及属性 NSMutableArray * elementsDataArr = [[NSMutableArray alloc] init]; /* 动画元素

IOS代码笔记之仿电子书书架效果_IOS

本文实例为大家分享了IOS书架效果的具体实现代码,供大家参考,具体内容如下 一.效果图   二.工程图  三.代码RootViewController.h #import <UIKit/UIKit.h> @interface RootViewController : UIViewController <UITableViewDataSource,UITableViewDelegate> { NSMutableArray * dataArray; UITableView * myTa

IOS实现图片轮播无限循环效果_IOS

本文接着上篇文章进行叙述讲解,主要为大家分享了图片轮播无限循环效果的实现方法,具体内容如下 之前说到第一个问题,ScrollView移动到最后一张图片时无法移动了,这是因为ScrollView已经移动到最后,而图片又是依次排列,自然也就无法移动. 解决办法是,我们换一个思路实现图片轮播效果,ScrollView上只放三个ImageView,屏幕始终显示中间的ImageView,左边和右边的ImageView分别代表前一张图片和后一张图片,屏幕移动的时候,中间的ImageView变化,同时左右两边

IOS使用UICollectionView实现无限轮播效果_IOS

一.案例演示 本案例Demo演示的是一个首页轮播的案例,支持手动轮播和自动轮播.知识点主要集中在UICollectionView和NSTimer的使用. 二.知识储备 2.1.UICollectionView横向布局 只需要设置UICollectionViewFlowLayout的scrollDirection为UICollectionViewScrollDirectionHorizontal即可. 2.2.NSTimer的基本使用 NSTimer的初始化: 复制代码 代码如下:  + (NST