原创 ios绘制 圆形气泡

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原创 ios绘制 圆形气泡相关的知识,希望对你有一定的参考价值。

效果:

 

 技术分享

1 先自定义一个view

#import <UIKit/UIKit.h>

 

#define kCalloutWidth   80.0   //气泡高度

#define kCalloutHeight  95.0   //气泡宽度

#define kArrorHeight    15      //底部距离高度

 

@interface CallOutContentView : UIView

 

@end

 

 

2实现代码

#import "CallOutContentView.h"

 @implementation CallOutContentView

 

- (instancetype)initWithFrame:(CGRect)frame {

 

    if (self = [super initWithFrame:frame]) {                

        self.backgroundColor = [UIColor clearColor];        

    }

    return self;

}

#pragma mark - draw rect

 

- (void)drawRect:(CGRect)rect{ 

  [self drawInContext:UIGraphicsGetCurrentContext()];

 

  self.layer.shadowColor = [[UIColor clearColor] CGColor];

  self.layer.shadowOpacity = 1.0;

  self.layer.shadowOffset = CGSizeMake(0.0f, 0.0f);

 }

 

- (void)drawInContext:(CGContextRef)context

{ 

    CGContextSetLineWidth(context, 2.0);

    CGContextSetFillColorWithColor(context, [UIColor colorWithRed:0.000 green:0.251 blue:0.502 alpha:1.000].CGColor); //气泡填充色

    [self getDrawPath:context];

}

 

//气泡背景绘制

- (void)getDrawPath:(CGContextRef)context

{

    CGRect rrect = self.bounds;    

    CGFloat radius = (kCalloutHeight - kArrorHeight) / 2.0; 

    CGFloat midx = CGRectGetMidX(rrect);

    CGFloat maxy = CGRectGetMaxY(rrect) - kArrorHeight;//调节离底部的位置

    CGFloat midy = maxy /2.0;

   

    CGContextSaveGState(context); //保存上下文 1

    

    CGContextBeginPath(context);

    

    //底部三角

    CGContextMoveToPoint(context, midx + kArrorHeight, maxy);

    CGContextAddLineToPoint(context, midx, maxy + kArrorHeight);

    CGContextAddLineToPoint(context, midx - kArrorHeight, maxy);    

    CGContextFillPath(context); //渲染三角形

 

    CGContextRestoreGState(context); //还原上下文 1

    CGContextAddArc(context, midx, midy + 5, radius, 0, M_PI*2, 1);//画圆

    CGContextFillPath(context); //渲染圆形

    CGContextClosePath(context);

}

 

@end

3 创建实例

CallOutContentView *callOutView = [[CallOutContentView alloc]initWithFrame:CGRectMake(0, 0, kCalloutWidth, kCalloutHeight)];

 

以上是关于原创 ios绘制 圆形气泡的主要内容,如果未能解决你的问题,请参考以下文章

如何检测贝塞尔曲线和圆形物体之间的碰撞?

iOS绘制聊天气泡

createjs 绘制圆形图片

简单好用可任意定制的iOS Popover气泡

在 xamarin ios 中沿圆形路径绘制文本

如何重新加载圆形进度条