使用贝塞尔曲线,

  1. // 小于四个角 圆角
  2. -(void)setbor{
  3.  
  4. NSString *str = @" couldn't fit this all in a comment to @lomanf's answer. So I'm adding it as an answer.";
  5. //计算字符高度
  6. [Corner layoutHeightWithLable:self.label text:str];
  7. /*
  8. 1.使用空白 view addSubView label
  9. 2.得到类似 qq 聊天气泡,仅仅只是类似,还是有区别
  10. */
  11. UIView *view = [[UIView alloc]init];
  12. //view 的 frame 要比 label 大一点,不然切圆角会切到字符串
  13. view.frame = CGRectMake( , , _label.frame.size.width + , _label.frame.size.height + );
  14. view.backgroundColor = [UIColor redColor];
  15. //圆角
  16. [Corner createCornerInView:view corners:UIRectCornerBottomLeft|UIRectCornerTopRight cgsize:CGSizeMake(, )];
  17.  
  18. [self.view addSubview:view];
  19. [view addSubview:_label];
  20. }

新建了一个类:Corner

.h

  1. #import <UIKit/UIKit.h>
  2.  
  3. @interface Corner : UIView
  4.  
  5. +(void)createCornerInView:(UIView *)view corners:(UIRectCorner)corner cgsize:(CGSize)size;
  6.  
  7. +(void)layoutHeightWithLable:(UILabel *)label text:(NSString *)text;
  8. @end

.m

  1. +(void)layoutHeightWithLable:(UILabel *)label text:(NSString *)text{
  2. label.numberOfLines = ;
  3. label.lineBreakMode = NSLineBreakByWordWrapping;
  4. CGSize maxSize = CGSizeMake(, MAXFLOAT);
  5. CGSize textSize = [text boundingRectWithSize:maxSize options:(NSStringDrawingUsesFontLeading | NSStringDrawingUsesLineFragmentOrigin) attributes:@{NSFontAttributeName:label.font} context:nil].size;
  6. label.frame = CGRectMake(label.frame.origin.x, label.frame.origin.y, textSize.width, textSize.height);
  7. label.text = text;
  8. }
  9.  
  10. +(void)createCornerInView:(UIView *)view corners:(UIRectCorner)corner cgsize:(CGSize)size{
  11. /*
  12. typedef NS_OPTIONS(NSUInteger, UIRectCorner) {
  13. UIRectCornerTopLeft = 1 << 0, - 左上角
  14. UIRectCornerTopRight = 1 << 1, - 右上角
  15. UIRectCornerBottomLeft = 1 << 2, - 左下角
  16. UIRectCornerBottomRight = 1 << 3, - 右下角
  17. UIRectCornerAllCorners = ~0UL - 四只角
  18. };
  19. */
  20. //贝塞尔曲线
  21. UIBezierPath *bezierPath = [UIBezierPath bezierPathWithRoundedRect:view.bounds byRoundingCorners:corner cornerRadii:size];
  22. CAShapeLayer *maskLayer = [[CAShapeLayer alloc]init];
  23. maskLayer.frame = view.bounds;
  24. maskLayer.path = bezierPath.CGPath;
  25. view.layer.mask = maskLayer;
  26. }

iOS 学习 - 11.圆角(小于等于四个)类似气泡和计算字符高度的更多相关文章

  1. iOS学习笔记(十四)——打电话、发短信

    电话.短信是手机的基础功能,iOS中提供了接口,让我们调用.这篇文章简单的介绍一下iOS的打电话.发短信在程序中怎么调用. 1.打电话 [[UIApplication sharedApplicatio ...

  2. 我的iOS学习之路(四):动画设置

    在ios的开发过程中,经常需要对视图控件进行变化,如大小,颜色,旋转等,这是如果直接将变化结果呈现出来,就显得不够友好,所以我们通常会使用动画,让用户能够看到变化的过程. 使用动画通常有两种方式,一种 ...

  3. IOS学习之路十四(用TableView做的新闻客户端展示页面)

    最近做的也个项目,要做一个IOS的新闻展示view(有图有文字,不用UIwebview,因为数据是用webservice解析的到的json数据),自己一直没有头绪,可后来听一个学长说可以用listvi ...

  4. 【原】iOS学习之图片拉伸处理(类似qq的气泡)

    原理是拉伸里面的内容,将边保护起来 方法1: ①[image resizableImageWithCapInsets:UIEdgeInsetsMake(, , , )]; ②[image resiza ...

  5. iOS 学习 - 20 UICollectionView 移动 Item ,类似背包

    有100个 item,数据源只有20个,只能在 20 个之间移动,防止 item 复用,出现 bug 方法一:苹果自带 //UICollectionViewDataSource- (BOOL)coll ...

  6. iOS学习11之OC继承

    面向对象的三大特性:封装,继承,多态. 1.继承 继承既能保证类的完整,又能简化代码. 把公共的⽅法和实例变量写在⽗类⾥,⼦类只需要写⾃⼰独有的实例变量和⽅法即可. 继承是⾯向对象三⼤特性之⼀,合理的 ...

  7. IOS学习笔记(四)之UITextField和UITextView控件学习

    IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...

  8. 【转】 iOS学习之sqlite的创建数据库,表,插入查看数据

    原文:  http://blog.csdn.net/totogo2010/article/details/7702207 iOS sqlite数据库操作.步骤是: 先加入sqlite开发库libsql ...

  9. iOS学习——UIView的研究

    在iOS开发中,我们知道有一个共同的基类——NSObject,但是对于界面视图而言,UIView是非常重要的一个类,UIView是很多视图控件的基类,因此,对于UIView的学习闲的非常有必要.在iO ...

随机推荐

  1. HTML标签理解

    基础回顾 1:<!DOCTYPE HTML> 这个我们都不陌生,它是文档说明,在html页面的第一行就写的是这个.在 html5中只有一个,大小写不敏感.是便于浏览器识别文档类型. 2:& ...

  2. 【原创】jQuery 仿百度输入标签插件

    1.先上效果图 2.调用方式 <link href="/Styles/tagsinput.css" rel="stylesheet" type=" ...

  3. easyui-datagrid自动合并行

    1.目标 1.1表格初始化完成后,已经自动合并好需要合并的行: 1.2当点击字段排序后,重新进行合并: 2.实现 2.1 引入插件 /** * author ____′↘夏悸 * create dat ...

  4. C# 6.0的字典(Dictionary)的语法

    在C# 6.0,当我们使用Dictionary时,我们可以使用新语法,来去简化程序以提高效率. public Dictionary<string, object> OldToolLocat ...

  5. 走进异步世界-犯傻也值得分享:ConfigureAwait(false)使用经验分享

    在上周解决“博客程序异步化改造之后遭遇的性能问题”的过程中,我们干了一件自以为很有成就感的事——在表现层(MVC与WebForms)将所有使用await的地方都加上了ConfigureAwait(fa ...

  6. MVP 2015社区大讲堂之:在ASP.NET应用中执行后台任务

    昨天下午,在微软的MVP 2015社区大讲堂上给大家分享了一个题目:在ASP.NET应用中执行后台任务.这是一点都不高大上,并且还有点土气的技术分享.不过我相信很多人都遇到过这样的问题. 虽然是一个很 ...

  7. WCF在编译出现 “错误 3 命令“时解决

    如果你遇到了下面问题解决方案很简单,以管理员身份运行VS就OK了. 错误 3 命令“ mkdir %SystemDrive%\inetpub\wwwroot\servicemodelsamples m ...

  8. jquery表单对象属性选择器

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. Android使用SAX解析XML(3)

    主界面MainActivity.java: package com.hzhi.my_sax; import java.util.ArrayList; import android.os.Bundle; ...

  10. Map遍历两种方式

    Java代码 Map<String,String> map=new HashMap<String,String>(); map.put("username" ...