iOS 自定义绘制气泡

来源:互联网 发布:voip网络电话机 编辑:程序博客网 时间:2024/04/30 03:05

效果图:


代码如下:

#import "PopView.h"

#define kPopupTriangleHeigh 5

#define kPopupTriangleWidth 6

#define kPopupTriangleTopPointX 3 * (self.frame.size.width - kPopupTriangleWidth)/20.0f

#define kBorderOffset       0//0.5f

@implementation PopView


- (instancetype)initWithFrame:(CGRect)frame

{

    if (self = [superinitWithFrame:frame]) {

        self.backgroundColor = [UIColorclearColor];

        [self initUI];

    }

    return self;

}

- (void)initUI

{

    _label = [[UILabelalloc] init];

    _label.textColor = [UIColorcolorFromHex:0x666666];

    _label.font = [UIFontsystemFontOfSize:11];

    _label.numberOfLines =0;

    _label.text =@"地址作为评估贷款额度的重要依据,需精确到门牌号\n请按如下格式填写:\n小区类:XX路XX号XX小区XX栋XX室\n农村类:XX县XX镇XX村XX组\n大厦类:XX路XX号XX大厦XX层XX室";

    [selfaddSubview:_label];

    [_label mas_makeConstraints:^(MASConstraintMaker *make) {

        make.left.mas_equalTo(self.mas_left).mas_equalTo(10);

        make.centerX.mas_equalTo(self.mas_centerX);

        make.top.mas_equalTo(self.mas_top).mas_equalTo(20);

    }];

}

-(void)drawRect:(CGRect)rect{

    [super drawRect:rect];

    

    CGFloat viewW = rect.size.width;

    CGFloat viewH = rect.size.height;

    

    CGFloat strokeWidth = 0.2;

    CGFloat borderRadius = 5;

    CGFloat offset = strokeWidth + kBorderOffset;

    

    CGContextRef context =UIGraphicsGetCurrentContext();

    CGContextSetLineJoin(context,kCGLineJoinRound); //

    CGContextSetLineWidth(context, strokeWidth);// 设置画笔宽度

    CGContextSetStrokeColorWithColor(context, [UIColorcolorFromHex:0x3082f2].CGColor);// 设置画笔颜色

    CGContextSetFillColorWithColor(context, [UIColorwhiteColor].CGColor);// 设置填充颜色

    

    CGContextBeginPath(context);

    CGContextMoveToPoint(context, borderRadius+offset,kPopupTriangleHeigh + offset);

    CGContextAddLineToPoint(context,kPopupTriangleTopPointX - kPopupTriangleWidth /2.0 + offset,kPopupTriangleHeigh + offset);

    CGContextAddLineToPoint(context, kPopupTriangleTopPointX, offset);

    CGContextAddLineToPoint(context,kPopupTriangleTopPointX + kPopupTriangleWidth /2.0 +offset,kPopupTriangleHeigh+offset);

    

    CGContextAddArcToPoint(context, viewW-offset,kPopupTriangleHeigh+offset, viewW-offset, kPopupTriangleHeigh+offset + borderRadius, borderRadius-strokeWidth);

    CGContextAddArcToPoint(context, viewW-offset, viewH - offset, viewW-borderRadius-offset, viewH - offset, borderRadius-strokeWidth);

    CGContextAddArcToPoint(context, offset, viewH - offset, offset, viewH - borderRadius - offset, borderRadius-strokeWidth);

    CGContextAddArcToPoint(context, offset, kPopupTriangleHeigh + offset, viewW - borderRadius - offset, kPopupTriangleHeigh + offset, borderRadius-strokeWidth);

    CGContextClosePath(context);

    CGContextDrawPath(context,kCGPathFillStroke);

}

- (void)dismiss

{

    __weak __typeof(self) weakSelf =self;

    [UIViewanimateWithDuration:0.2animations:^{

        weakSelf.alpha = 0;

        weakSelf.frame = CGRectMake(weakSelf.frame.origin.x +kPopupTriangleTopPointX , weakSelf.frame.origin.y,0, 0);

    } completion:^(BOOL finished) {

        [_labelremoveFromSuperview];

        [weakSelf removeFromSuperview];

        

    }];

}


@end




原创粉丝点击