iOS实现圆角箭头矩形的提示框

2020-01-18 17:51:07王冬梅

三、简单封装

看到上面 你可以画出 圆角箭头矩形

还记得 .h 中 定义的属性 fillColorStr, 可以进行调用, 随意更改填充颜色, 圆弧角度等.

仅简单封装下 (读者自行严谨封装)


- (void)drawRect:(CGRect)rect {


 // 默认圆角角度
 float r = 4;
 // 居中偏移量(箭头高度)
 float offset = 5;
 // 设置 箭头位置
 float positionNum = 20;


 // 定义坐标点 移动量
 float changeNum = r + offset;
 // 设置画线 长 宽
 float w = self.frame.size.width ;
 float h = self.frame.size.height;


 // 获取文本
 CGContextRef context = UIGraphicsGetCurrentContext();
 // 设置 边线宽度
 CGContextSetLineWidth(context, 0.2);
 //边框颜色
 CGContextSetStrokeColorWithColor(context, [UIColor grayColor].CGColor);
 //矩形填充颜色
 if ([self.fillColorStr isEqualToString:@"fillColorChange"]) {

  CGContextSetFillColorWithColor(context, [UIColor blueColor].CGColor);
 }else{
  CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
 }

 CGContextMoveToPoint(context, r, offset); // 开始坐标左边开始
 CGContextAddArcToPoint(context, w, offset, w, changeNum, r); // 右上角角度
 CGContextAddArcToPoint(context, w , h - offset, w - changeNum, h - offset, r); // 右下角角度

 CGContextAddLineToPoint(context, positionNum + 10, h - offset); // 向左划线
 CGContextAddLineToPoint(context, positionNum + 5, h); // 向下斜线
 CGContextAddLineToPoint(context, positionNum, h - offset); // 向上斜线

 CGContextAddArcToPoint(context, 0, h - offset, 0, h - changeNum, r); // 左下角角度
 CGContextAddArcToPoint(context, 0, offset, r, offset, r); // 左上角角度

 CGContextDrawPath(context, kCGPathFillStroke); //根据坐标绘制路径

 /** 父类调用 放在画完边线 后. 不然 设置的文字会被覆盖 */
 [super drawRect:rect];

}

// 当 要改变填充颜色 可以进行调用改变
-(void)setFillColorStr:(NSString *)fillColorStr{

  _fillColorStr = fillColorStr;

 // 调用- (void)drawRect:(CGRect)rect; 重绘填充颜色
 [self setNeedsDisplay]; 
}

ios,圆角边框,ios绘制圆角矩形,ios提示框样式

将控件颜色 设置为透明, 一个 自定义的提示框完成. 作者仅提供一种方法, 读者也可用 UIBezierPath等 去实现.

四、补充说明

有人说 直接用图片实现, 都可以 , 看工程需求. 此文主要聊的是

用 - (void)drawRect:(CGRect)rect; 绘制 圆角箭头

介绍CGContextAddArcToPoint的使用

对用图片实现 , 形变问题.

UIImage 类提供


(UIImage*)stretchableImageWithLeftCapWidth:(NSInteger)leftCapWidth topCapHeight;

简单说明下

图片为 100 * 56 像素


UIImage *tempImage = [UIImage imageNamed:@"tip.png"];

/** 说明 : 创建一个内容可拉伸,边角不拉伸的图片, 单位为像素
 * LeftCapWidth: 左边不拉伸区域的宽度
 * topCapHeight: 上面不拉伸区域高度
 * 之后沿此区域 横纵拉伸, 边角不变
 */
 tempImage = [tempImage stretchableImageWithLeftCapWidth:80 topCapHeight:20];

 UIImageView *imgView=[[UIImageView alloc]initWithImage:tempImage];
 imgView.frame = CGRectMake(100, 100, 200, 56);
 [self. view addSubview:imgView];