• 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
  • 相关阅读:
    解决Sqlite Developer过期的最简单办法(转自百度经验)
    (转)解决!Visual Studio 遇到了异常。这可能是由某个扩展导致的。
    【转】VC中的class“std::vector<_Ty>”需要有 dll 接口由 class“Test”的客户端使用错误
    切换日语输入法找不到MicrosoftIME键盘选项了
    ps如何拆分图片
    码农应该注意保持的习惯
    "指定的文件格式无法识别或为不支持的二进制"
    编译FlashDemo遇到问题:Error "pFlashUI未定义的标识符"
    GridView,GridLayout
    Android,ArrayList,List,Set等
  • 原文地址:https://www.cnblogs.com/YouXianMing/p/5571991.html
Copyright © 2020-2023  润新知