zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    node
    github
    [模块] pdf转图片-pdf2image
    python 15 自定义模块 随机数 时间模块
    python 14 装饰器
    python 13 内置函数II 匿名函数 闭包
    python 12 生成器 列表推导式 内置函数I
    python 11 函数名 迭代器
    python 10 形参角度 名称空间 加载顺序
    python 09 函数参数初识
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5571991.html
Copyright © 2011-2022 走看看