文档章节

IOS气泡实现

小鸡蹲蘑菇
 小鸡蹲蘑菇
发布于 2015/09/21 16:31
字数 326
阅读 64
收藏 1

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";


© 著作权归作者所有

小鸡蹲蘑菇
粉丝 5
博文 68
码字总数 24144
作品 0
海淀
私信 提问
iOS 10 第八个开发者测试版、第七个公测版

苹果今天向开发者发布了 iOS 10 第八个开发者测试版以及第七个公测版,距离第七个测试版仅仅相隔四天的时间。苹果在今年6月举行的 WWDC 上发布了 iOS 10 测试版,目前,我们还不知道 iOS 10...

花仲马
2016/08/28
1K
3
艾润物联/vehicle-keyboard-android

停车王车牌号码专用键盘 VehicleKeyboard - Android 是停车王品牌的各端产品线的基础组件,专为提高中国车牌号码输入速度而定制开发的专用键盘组件,包括以下三个项目: Android项目,为And...

艾润物联
2018/04/24
0
0
iOS 开发 之百度地图气泡显示问题

iOS 开发 百度地图中如何让标注的气泡显示在当前屏幕内,当标注显示在当前屏幕左边上的时候,点击该标注,气泡就会有一部分不能显示在屏幕内,请大家知道的指点一下,谢谢!

demoker
2014/09/26
2.1K
0
2018 iOS 面试题大全(补充完整版)

原文地址:2018 iOS 面试题大全 由于原作者并没有继续更新,这里我转过来继续更新下 这个栏目将持续更新--请iOS的小伙伴关注! 1、iOS 应用导航模式有哪些? 2、iOS 中持久化方式有哪些? 3、...

Theendisthebegi
2018/11/15
0
0
iOS与JS交互之UIWebView-JSExport协议

级别:★★☆☆☆ 标签:「iOS与JS交互」「UIWebView与JS交互」「JSExport」 作者: Xs·H 审校: QiShare团队 先解释下标题:“iOS与JS交互”。iOS指原生代码(文章只有示例),JS指前端(不...

QiShare
2018/08/31
0
0

没有更多内容

加载失败,请刷新页面

加载更多

浅谈梯子游戏三门打法技巧走势攻略教程(学会稳稳上岸)

摘要:那么下面我就给大家总结一下技巧和玩法!一、玩梯子的前期准备:1,最重要是zi金准备,提前做好ben金准备能保证自己的zi金链不断,稳中求胜。2,其次是止sun底线,风险控制一定要懂得舍弃,买彩...

V_6696089
45分钟前
8
0
今天发布 需求登记表,不戴眼镜开发的成果

今天是不戴眼镜调理第八天 之前带五百度眼睛0.5 现在是做了三次调理,通常,成人比青少年要慢些 明天正式学习 调理技术 最近不怎么开电脑做开发,发现时间多了许多 虽然想把开发缓一阵子,但...

蒋志祥
53分钟前
4
0
Linux 之docker部署,走过的那些坑

初次使用docker, 多有不足,这里把坑一点点的记下来 概念篇 docker 是什么? 太多文字不同,书读的少, 不懂大大道理; 在我的理解, 它就是个沙箱环境; 在linux中 ,独立进程, 有着自己的小世界 使...

莫库什勒
今天
5
0
vue class绑定 组件

本文转载于:专业的前端网站➬vue class绑定 组件 当在一个自定义组件上使用 class 属性时,这些类将被添加到该组件的根元素上面。这个元素上已经存在的类不会被覆盖。 例如,如果你声明了这个...

前端老手
今天
5
0
exist和in

exist和in select ..from table where exist (子查询) ; select ..from table where 字段 in (子查询) ; 如果主查询的数据集大,则使用In,效率高。 如果子查询的数据集大,则使用exist,效率高...

潦草的犀牛
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部