IOS气泡实现

WPBadgeView.h

//
//  WPBadgeView.h
//  draw
//
//  Created by wupeng on 15/9/18.
//  Copyright (c) 2015年 wupeng. All rights reserved.
//

#import <UIKit/UIKit.h>
//Constant
static const int RectangleWidth = 22;
static const int CircleCenter = RectangleWidth * 0.5;
static const int CircleRedius = RectangleWidth * 0.5;
static const float borderWith = 2.0f;

@interface WPBadgeView : UIView
@property (nonatomic,strong) NSString *badgeText;
@property (nonatomic,strong) UIColor *borderColor;
@property (nonatomic,strong) UIFont *fontSize;


-(instancetype)initWithHostView:(UIView *)hostView;

@end

WPBadgeView.m

//
//  WPBadgeView.m
//  draw
//
//  Created by wupeng on 15/9/18.
//  Copyright (c) 2015年 wupeng. All rights reserved.
//

#import "WPBadgeView.h"

@implementation WPBadgeView

-(instancetype)initWithHostView:(UIView *)hostView
{
    if (self = [super initWithFrame:CGRectZero]) {
        [hostView addSubview:self];
        self.frame = CGRectMake(CGPointZero.x, CGPointZero.y, RectangleWidth, RectangleWidth);
        CGRect hostFrame = hostView.frame;
        self.center = CGPointMake(hostFrame.size.width,0);
        self.backgroundColor = [UIColor clearColor];
//        初始化赋值badgeText,当其为nil的时候初始化
        if (!_badgeText){
            _badgeText = @"...";
        }
        if (!_fontSize) {
            _fontSize = [UIFont boldSystemFontOfSize:12.f];
        }
    }
    return  self;
}

-(void)setBadgeText:(NSString *)badgeText
{
    if (badgeText != _badgeText) {
        _badgeText = [badgeText copy];
        [self setNeedsDisplay];
        [self setNeedsLayout];
    }
}
-(void)setFontSize:(UIFont *)fontSize
{
    if (fontSize != _fontSize) {
        _fontSize = fontSize;
        [self setNeedsDisplay];
        [self setNeedsLayout];
    }
}
-(void)drawRect:(CGRect)rect
{
    CGContextRef context = UIGraphicsGetCurrentContext();
    self.backgroundColor = [UIColor clearColor];
//    画圆
    CGContextSaveGState(context);
    {
        CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
        CGContextAddArc(context, CircleCenter , CircleCenter, CircleRedius, 0, 2 * M_PI, 1);
        CGContextFillPath(context);
        CGContextSetStrokeColorWithColor(context, [UIColor whiteColor].CGColor);
    }
    CGContextRestoreGState(context);
//   画文字
    CGContextSaveGState(context);
    {
        CGContextSetFillColorWithColor(context, [UIColor whiteColor].CGColor);
        CGSize strSize = [self.badgeText sizeWithAttributes:@{NSFontAttributeName:self.fontSize}];
        CGFloat badgeTextX = (CircleCenter - (strSize.width  * 0.5));
        CGFloat badgeTextY = (CircleCenter - (strSize.height * 0.5));

        [self.badgeText drawInRect:CGRectMake(badgeTextX, badgeTextY, strSize.width ,strSize.height) withAttributes:@{NSFontAttributeName:self.fontSize,NSForegroundColorAttributeName:[UIColor whiteColor]}];
    }
    CGContextRestoreGState(context);
}
//重新布局角标的Frame
-(void)layoutSubviews
{
    [super layoutSubviews];
    CGRect newFrame = self.frame;
    CGFloat superviewWidth = self.superview.bounds.size.width;
    newFrame.origin.x = superviewWidth - (RectangleWidth * 0.5);
    newFrame.origin.y = -RectangleWidth * 0.5;
    self.bounds = CGRectIntegral(CGRectMake(0, 0, CGRectGetWidth(newFrame), CGRectGetHeight(newFrame)));
    self.center = CGPointMake(ceilf(CGRectGetMidX(newFrame)), ceilf(CGRectGetMidY(newFrame)));
}

@end

使用方法:

WPBadgeView *toPayBubble = [[WPBadgeView alloc] initWithHostView:self.toPayView];
toPayBubble.badgeText = @"99";


你可能感兴趣的:(IOS气泡实现)