最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

iOS實(shí)現(xiàn)帶文字的圓形頭像效果

 更新時(shí)間:2016年10月21日 14:44:48   投稿:daisy  
隨著騰訊QQ的普及,現(xiàn)在越來(lái)越多的社交類APP在顯示頭像的時(shí)候,都選擇了圓形頭像,本文將更進(jìn)一步的介紹如何實(shí)現(xiàn)帶文字的圓形頭像效果,效果非常不錯(cuò),感興趣的朋友們可以參考借鑒,下面來(lái)一起看看吧。

下面就來(lái)實(shí)現(xiàn)一下這種效果   圓形頭像的繪制

先來(lái)看一下效果圖

分析一下:

      1、首先是需要畫帶有背景色的圓形頭像

      2、然后是需要畫文字

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

      4、不同的字符串,圓形的背景色是不一樣的

      5、對(duì)于中英文同樣處理,英文的一個(gè)字符和中文的一個(gè)漢字同樣算作一個(gè)字符

      6、文字總是居中顯示

好 有了這樣幾點(diǎn) 我們就可以開始畫圖了

看一下最終實(shí)現(xiàn)的效果圖

首先 ,我們需要自定義一個(gè)view當(dāng)做自定義頭像,在view的drawRect方法中進(jìn)行圖像的繪制

@interface RoundHeadView()
@property (nonatomic, copy) NSString *title;//需要繪制的標(biāo)題
@property (nonatomic, assign) CGFloat colorPoint;//用戶后面計(jì)算顏色的隨機(jī)值
//設(shè)置文字
- (void)setTitle:(NSString *)title;
@end
@implementation RoundHeadView
-(instancetype)initWithFrame:(CGRect)frame{
  self = [super initWithFrame:frame];
  if (self) {
    self.backgroundColor = [UIColor clearColor];
  }
  return self;
}
@end

首先畫一個(gè)帶有背景顏色的圓形

-(void)drawRect:(CGRect)rect{
  
  //一個(gè)不透明類型的Quartz 2D繪畫環(huán)境,相當(dāng)于一個(gè)畫布,你可以在上面任意繪畫
   CGContextRef context = UIGraphicsGetCurrentContext();
   [self caculateColor];//計(jì)算顏色
  
  /*畫圓*/
   CGContextSetRGBFillColor (context,_colorPoint, 0.5, 0.5, 1.0);//設(shè)置填充顏色 顏色這里隨機(jī)設(shè)置的,后面會(huì)根據(jù)文字來(lái)計(jì)算顏色
  
  //填充圓,無(wú)邊框
  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); //添加一個(gè)圓
  CGContextDrawPath(context, kCGPathFill);//繪制填充
  }

得到了不帶文字的圓形頭像

接下來(lái) 我們來(lái)畫文字

首先需要計(jì)算一下文字的尺寸

將文字設(shè)置進(jìn)來(lái)

- (void)setTitle:(NSString *)title{
  _title = [[self subStringWithLendth:2 string:title] copy];
  [self setNeedsDisplay];//調(diào)用這個(gè)方法 進(jìn)行重新繪制 view會(huì)重新調(diào)用drawRect方法
}

截取文字

/**
 截取字符串,截取字符串最開始的兩個(gè) 漢子和英文一樣處理
 @param length 截取的字符長(zhǎng)度(漢子和英文同樣計(jì)算)
 @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;
}
/**
 計(jì)算文字的尺寸,在繪制圖像時(shí),保證文字總是處于圖像的正中
 文字的尺寸可以自己計(jì)算 這里定義的是 寬度的1/3 我看使用起來(lái)比較合適 當(dāng)然
 你可以自己定義的
 @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

還需要做一步處理 就是根據(jù)文字的拼音或者其他的什么東西 來(lái)定義圖像的背景色 我這里就用拼音了
首先需要做的是獲取拼音

/**
 獲取漢子拼音
 @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:@""];
}

根據(jù)拼音計(jì)算顏色,隨即一個(gè)顏色 這個(gè)方法 我自己瞎想的 一個(gè)顏色 當(dāng)然你可以自己定義一個(gè)方法來(lái)計(jì)算顏色

/**
 隨機(jī)一個(gè)顏色
 填充圓形頭像的底色
 根據(jù)字符的拼音計(jì)算出的顏色
 */
- (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{
  
  //一個(gè)不透明類型的Quartz 2D繪畫環(huán)境,相當(dāng)于一個(gè)畫布,你可以在上面任意繪畫
  CGContextRef context = UIGraphicsGetCurrentContext();
  [self caculateColor];//計(jì)算顏色
  
  /*畫圓*/
  CGContextSetRGBFillColor (context,_colorPoint, 0.5, 0.5, 1.0);//設(shè)置填充顏色
  //  CGContextSetRGBStrokeColor(context,red,green,blue,1.0);//畫筆線的顏色
  
  //填充圓,無(wú)邊框
  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); //添加一個(gè)圓
  CGContextDrawPath(context, kCGPathFill);//繪制填充
  
  
  /*寫文字*/
  //  CGContextSetRGBFillColor (context, 1, 0, 0, 1.0);//設(shè)置填充顏色
  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];
}

測(cè)試一下

UILabel *label = [[UILabel alloc] initWithFrame:CGRectMake(10, 50, 300, 20)];
label.text = @"文字不同,背景顏色也不會(huì)相同";
[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];
}

總結(jié)

好了,到這就大功告成了,大家都學(xué)會(huì)了嗎?希望本文的內(nèi)容對(duì)各位iOS開發(fā)者們能有所幫助,如果有疑問(wèn)大家可以留言交流。謝謝大家對(duì)腳本之家的支持。

相關(guān)文章

最新評(píng)論

额敏县| 绵竹市| 沁阳市| 都匀市| 富顺县| 奈曼旗| 华蓥市| 通江县| 永昌县| 祁东县| 宁陕县| 常熟市| 霍邱县| 昭苏县| 托里县| 邵阳县| 婺源县| 南安市| 香港| 兴文县| 安溪县| 山阴县| 汉阴县| 娄烦县| 平阴县| 永春县| 漳浦县| 新沂市| 绩溪县| 桂阳县| 阿鲁科尔沁旗| 云林县| 台东市| 庆云县| 铁岭市| 吉水县| 淄博市| 新安县| 玛曲县| 吴江市| 上思县|