当前位置: 首页 > news >正文

BadgeValueView

BadgeValueView

 

效果

 

源码

https://github.com/YouXianMing/UI-Component-Collection 中的 BadgeValueView

//
//  BadgeValueView.h
//  BadgeView
//
//  Created by YouXianMing on 16/5/17.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import <UIKit/UIKit.h>

typedef NS_ENUM(NSUInteger, BadgePosition) {
    
    BadgePositionCenterLeft,
    BadgePositionCenterRight,
    
    BadgePositionTopLeft,
    BadgePositionTopRight,
    
    BadgePositionBottomLeft,
    BadgePositionBottomRight,
};

@interface BadgeValueView : UIView

/**
 *  bedge值
 */
@property (nonatomic, strong) NSString  *badgeValue;

/**
 *  被附着的view
 */
@property (nonatomic, weak)   UIView    *contentView;

/**
 *  敏感字符增长宽度,默认值为4
 */
@property (nonatomic)  CGFloat        sensitiveTextWidth;

/**
 *  敏感增长宽度,默认为10
 */
@property (nonatomic)  CGFloat        sensitiveWidth;

/**
 *  固定高度,默认为20
 */
@property (nonatomic)  CGFloat        fixedHeight;

/**
 *  位置信息,默认为BadgePositionTopRight
 */
@property (nonatomic)  BadgePosition  position;

/**
 *  字体,默认为12
 */
@property (nonatomic, strong) UIFont    *font;

/**
 *  字体颜色,默认为白色
 */
@property (nonatomic, strong) UIColor   *textColor;

/**
 *  bedge颜色,默认为红色
 */
@property (nonatomic, strong) UIColor   *badgeColor;

/**
 *  开始生效
 */
- (void)makeEffect;

/**
 *  设置BadgeValue
 *
 *  @param value    BadgeValue
 *  @param animated 是否执行动画
 */
- (void)setBadgeValue:(NSString *)value animated:(BOOL)animated;

@end
//
//  BadgeValueView.m
//  BadgeView
//
//  Created by YouXianMing on 16/5/17.
//  Copyright © 2016年 YouXianMing. All rights reserved.
//

#import "BadgeValueView.h"
#import "UIView+SetRect.h"

@interface BadgeValueView ()

@property (nonatomic, strong) UILabel *label;

@end

@implementation BadgeValueView

- (instancetype)init {
    
    if (self = [super init]) {
    
        self.sensitiveWidth     = 10;
        self.fixedHeight        = 20;
        self.sensitiveTextWidth = 4;
        self.position           = BadgePositionTopRight;
        self.font               = [UIFont systemFontOfSize:12.f];
        self.textColor          = [UIColor whiteColor];
        self.badgeColor         = [UIColor redColor];
    }
    
    return self;
}

- (void)makeEffect {

    // 标签
    self.label               = [[UILabel alloc] init];
    self.label.textColor     = self.textColor;
    self.label.textAlignment = NSTextAlignmentCenter;
    self.label.font          = self.font;
    [self addSubview:self.label];
    
    // 背景色
    self.backgroundColor     = self.badgeColor;
    self.width               = self.fixedHeight;
    self.height              = self.fixedHeight;
    self.layer.cornerRadius  = self.fixedHeight / 2.f;
    self.layer.masksToBounds = YES;
    
    [_contentView addSubview:self];
}

- (void)setBadgeValue:(NSString *)badgeValue animated:(BOOL)animated {

    _badgeValue = badgeValue;
    
    // 是否执行动画
    if (animated) {
        
        [UIView animateWithDuration:0.15f animations:^{
            
            self.alpha = badgeValue.length == 0 ? 0 : 1;
        }];
        
    } else {
    
        self.alpha = badgeValue.length == 0 ? 0 : 1;
    }
    
    // 如果值为空,则不执行后续操作
    if (badgeValue.length <= 0) {
        
        return;
    }
    
    // 设置文本
    self.label.text = badgeValue;
    [self.label sizeToFit];
    
    // 更新尺寸
    if (self.label.width + self.sensitiveTextWidth > self.width) {
        
        self.width += self.sensitiveWidth;
        
    } else {
        
        self.width = self.fixedHeight;
    }
    
    // 更新文本尺寸
    self.label.center = self.middlePoint;
    
    // 根据位置更新尺寸
    CGFloat offset = self.fixedHeight / 2.f;
    self.position == BadgePositionCenterLeft  ? self.left = -offset, self.centerY = self.contentView.middleY : 0;
    self.position == BadgePositionCenterRight ? self.left = self.contentView.width - offset, self.centerY = self.contentView.middleY : 0;
    
    self.position == BadgePositionTopLeft     ? self.left = -offset, self.y    = -offset : 0;
    self.position == BadgePositionTopRight    ? self.top  = -offset, self.left = self.contentView.width - offset : 0;
    
    self.position == BadgePositionBottomLeft  ? self.left = -offset, self.top = self.contentView.height - offset : 0;
    self.position == BadgePositionBottomRight ? self.left = self.contentView.width - offset, self.top = self.contentView.height - offset : 0;
}

- (void)setBadgeValue:(NSString *)badgeValue {

    [self setBadgeValue:badgeValue animated:NO];
}

@end

 

转载于:https://www.cnblogs.com/YouXianMing/p/5571991.html

相关文章:

  • 64位win7下安装SQL Server 2008(图文解说版)
  • CSS3——让最后一行显示省略号
  • “前.NET Core时代”如何实现跨平台代码重用 ——程序集重用
  • 依赖注入框架:autofac
  • Educational Codeforces Round 13 E. Another Sith Tournament 状压dp
  • Python的模块与函数以及与自动化的结合
  • Visual Studio 2015+InstallShield 2015
  • C# XML与Json之间相互转换实例详解
  • S3C6410触摸屏驱动分析
  • BZOJ4488: [Jsoi2015]最大公约数
  • golang的linux安装
  • IOS 更改百度地图的定位图片
  • 掌握 cinder-scheduler 调度逻辑 - 每天5分钟玩转 OpenStack(48)
  • Webx之表单验证
  • Python装饰器通用样式
  • .pyc 想到的一些问题
  • 【刷算法】从上往下打印二叉树
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • Android交互
  • Android路由框架AnnoRouter:使用Java接口来定义路由跳转
  • Angular2开发踩坑系列-生产环境编译
  • ES6之路之模块详解
  • GDB 调试 Mysql 实战(三)优先队列排序算法中的行记录长度统计是怎么来的(上)...
  • Git同步原始仓库到Fork仓库中
  • JS基础之数据类型、对象、原型、原型链、继承
  • js作用域和this的理解
  • React-Native - 收藏集 - 掘金
  • Vue官网教程学习过程中值得记录的一些事情
  • WePY 在小程序性能调优上做出的探究
  • 从重复到重用
  • 前端面试之闭包
  • 设计模式走一遍---观察者模式
  • Android开发者必备:推荐一款助力开发的开源APP
  • 好程序员web前端教程分享CSS不同元素margin的计算 ...
  • ​Linux Ubuntu环境下使用docker构建spark运行环境(超级详细)
  • #gStore-weekly | gStore最新版本1.0之三角形计数函数的使用
  • #mysql 8.0 踩坑日记
  • $GOPATH/go.mod exists but should not goland
  • (13)Hive调优——动态分区导致的小文件问题
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (分布式缓存)Redis哨兵
  • (三)Honghu Cloud云架构一定时调度平台
  • (十三)Flask之特殊装饰器详解
  • (一)80c52学习之旅-起始篇
  • (转) RFS+AutoItLibrary测试web对话框
  • (转)scrum常见工具列表
  • ***检测工具之RKHunter AIDE
  • **CI中自动类加载的用法总结
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • . Flume面试题
  • .Net IOC框架入门之一 Unity
  • .NetCore部署微服务(二)
  • .net开发时的诡异问题,button的onclick事件无效
  • .NET企业级应用架构设计系列之结尾篇