登录 立即注册
金钱:

Code4App-iOS开发-iOS 开源代码库-iOS代码实例搜索-iOS特效示例-iOS代码例子下载-Code4App.com

BAButton 图片、文字、倒计时等 git 功能最全的 button 分类

[复制链接]
来自: 博爱1616 分类: iOS精品源码 上传时间: 2017-8-15 15:46:21
Tag:

项目介绍:

BAButton

BAHome Team Name


![](https://img.shields.io/cocoapods/dt/BAButton.svg
)

1、功能及简介

  • 1、UIButton 图片、文字自定义布局

  • 2、UIButton 自定义切圆角,可以设置任意一个角的角半径

  • 3、用 UIButton 的分类处理,处理更简单,一行代码轻松搞定所有 UIButton 自定义

  • 4、新增 UIButton 各种状态下背景颜色、字体、border、font、动画等的监测及改变

  • 5、新增 UIButton 倒计时的封装,两行代码搞定倒计时!

  • 6、注意:文字、字体大小、图片等设置一定要在设置 ba_button_setBAButtonLayoutType 之前设置,要不然计算会以默认字体大小计算,导致位置偏移

  • 7、优化命名规范,更换了全局统一属性命名和方法命名,如果更新有报错的地方,大家别急,看 .h 文件更换过来即可,后期推出的 BAKit 系列产品,命名都将统一规范,在此给大家带来的不便之处,向大家道歉!希望大家谅解!多谢体谅!

  • 8、新增 view 的 border 的创建,可以自定义圆角、边框、边框颜色等(感谢群里 @北京-大腿 同学提出的 需求!)

  • 9、修复 xib 下圆角右边无效的bug,注意:如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效(感谢群里 @北京-小黑 同学提出的 bug!)

  • 10、新增 大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局,具体看 demo

  • 11、重构 <UIButton+BAKit.h>类,新增多种快速创建 button 的方法

  • 12、新增 两种快速创建 button 的方法:1、快速创建纯文字 button,2、快速创建纯图片 button

  • 13、新增 单独配置文字位置的封装

  • 14、新增 字体颜色、背景颜色、image 等的 disabled 状态下的配置

  • 15、新增 按钮点击音效和震动效果封装

  • 16、新增 倒计时按钮纯图片更换,详情请看 倒计时 demo

2、图片示例

BAButton1
BAButton2
BAButton3

3、安装、导入示例和源码地址

  • 1、pod 导入【最新版本:】:

    pod 'BAButton'

如果发现 pod search BAButton 搜索出来的不是最新版本,需要在终端执行 cd 转换文件路径命令退回到 desktop,然后执行 pod setup 命令更新本地spec缓存(可能需要几分钟),然后再搜索就可以了。

具体步骤:

    • pod setup : 初始化

    • pod repo update : 更新仓库

    • pod search BAButton

    • 2、文件夹拖入:下载demo,把 BAButton 文件夹拖入项目即可,

    • 3、导入头文件:

      #import "BAButton.h"

    • 4、项目源码地址:

      OC 版 :https://github.com/BAHome/BAButton

    4、BAButton 的类结构及 demo 示例

    BAButton

    BAButton.h

    #ifndef BAButton_h
    #define BAButton_h
    
    
    #import "UIButton+BAKit.h"
    #import "UIButton+BAState.h"
    #import "UIButton+BACountDown.h"
    #import "UIView+BARectCorner.h"
    #import "BAKit_ConfigurationDefine.h"
    
    
    /*!
     *********************************************************************************
     ************************************ 更新说明 ************************************
     *********************************************************************************
     
     欢迎使用 BAHome 系列开源代码 !
     如有更多需求,请前往:https://github.com/BAHome
     
     项目源码地址:
     OC 版 :https://github.com/BAHome/BAButton
     
     
     最新更新时间:2017-08-15 【倒叙】<br>
     最新 Version:【Version:2.6.2】<br>
     更新内容:<br>
     2.6.2.1、优化倒计时封装,线程处理优化 <br>
      
     最新更新时间:2017-08-14 【倒叙】<br>
     最新 Version:【Version:2.6.1】<br>
     更新内容:<br>
     2.6.1.1、新增 倒计时按钮纯图片更换,详情请看 倒计时 demo <br>
     
     最新更新时间:2017-08-12 【倒叙】<br>
     最新Version:【Version:2.6.0】<br>
     更新内容:<br>
     2.6.0.1、新增 按钮点击音效和震动效果封装 <br>
     
     最新更新时间:2017-08-03 【倒叙】<br>
     最新Version:【Version:2.5.9】<br>
     更新内容:<br>
     2.5.9.1、修复 UIButton:快速创建 button4:frame、title、backgroundImage 方法死循环bug(感谢群里 [@杭州-秦小强  11:52:23](https://github.com/wqforeverhell) 同学提出的 bug!) <br>
     
     最新更新时间:2017-07-19 【倒叙】<br>
     最新Version:【Version:2.5.8】<br>
     更新内容:<br>
     2.5.8.1、新增 两种快速创建 button 的方法:1、快速创建纯文字 button,2、快速创建纯图片 button <br>
     2.5.8.2、新增 单独配置文字位置的封装 <br>
     2.5.8.3、新增 字体颜色、背景颜色、image 等的 disabled 状态下的配置 <br>
    
     最新更新时间:2017-07-08 【倒叙】<br>
     最新Version:【Version:2.5.6】<br>
     更新内容:<br>
     2.5.6.1、删除 高亮、选中 背景颜色,以免默认情况下回自动加高亮颜色 <br>
     
     最新更新时间:2017-07-07 【倒叙】<br>
     最新Version:【Version:2.5.5】<br>
     更新内容:<br>
     2.5.5.1、重构 <UIButton+BAKit.h>类,新增多种快速创建 button 的方法 <br>
     2.5.5.2、新增多种快速创建 自定义 button 的方法 <br>
     
     最新更新时间:2017-06-27 【倒叙】<br>
     最新Version:【Version:2.5.4】<br>
     更新内容:<br>
     2.5.4.1、新增 大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局,具体看 demo test2<br>
     
     最新更新时间:2017-06-23 【倒叙】
     最新Version:【Version:2.5.3】
     更新内容:
     2.5.3.1、优化部分宏定义
     
     最新更新时间:2017-06-23 【倒叙】
     最新Version:【Version:2.5.2】
     更新内容:
     2.5.2.1、优化部分宏定义
     
     最新更新时间:2017-06-20 【倒叙】
     最新Version:【Version:2.5.1】
     更新内容:
     2.5.1.1、新增 view 的 border 的创建,可以自定义圆角、边框、边框颜色等(感谢群里 @北京-大腿 同学提出的 需求!)
     2.5.1.2、修复 xib 下圆角右边无效的bug,注意:如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效(感谢群里 @北京-小黑 同学提出的 bug!)
     
     最新更新时间:2017-06-19 【倒叙】
     最新Version:【Version:2.5.0】
     更新内容:
     2.5.0.1、优化命名规范,更换了全局统一属性命名和方法命名,如果更新有报错的地方,大家别急,看 .h 文件更换过来即可,后期推出的 BAKit 系列产品,命名都将统一规范,在此给大家带来的不便之处,向大家道歉!希望大家谅解!多谢体谅!
     
     最新更新时间:2017-06-01 【倒叙】
     最新Version:【Version:2.4.3】
     更新内容:
     2.4.3.1、快速创建 button 方法改为类方法,可直接调用!
     
     最新更新时间:2017-06-01 【倒叙】
     最新Version:【Version:2.4.2】
     更新内容:
     2.4.2.1、优化注释
     
     最新更新时间:2017-06-01 【倒叙】
     最新Version:【Version:2.4.1】
     更新内容:
     2.4.1.1、优化注释,注意:文字、字体大小、图片等设置一定要在设置 ba_button_setBAButtonLayoutType 之前设置,要不然计算会以默认字体大小计算,导致位置偏移
     
     最新更新时间:2017-05-27 【倒叙】
     最新Version:【Version:2.4.0】
     更新内容:
     2.4.0.1、此版本由 [子丰大神](https://github.com/renzifeng) 亲自改版,再次感谢 [子丰大神](https://github.com/renzifeng)
     2.4.0.2、新增 UIButton 各种状态下背景颜色、字体、border、font、动画等的监测及改变
     2.4.0.3、新增 UIButton 倒计时的封装,两行代码搞定倒计时!
     2.4.0.4、优化整体代码结构,代码规范!
     
     最新更新时间:2017-05-26 【倒叙】
     最新Version:【Version:2.3.2】
     更新内容:
     2.3.2.1、优化代码结构,修复 frame 改变后 padding 无法更改的问题!
     
     最新更新时间:2017-05-24 【倒叙】
     最新Version:【Version:2.3.1】
     更新内容:
     2.3.1.1、新增:padding_inset,文字或图片距离 button 左右边界的最小距离,默认为:5
     
     最新更新时间:2017-05-20 【倒叙】
     最新Version:【Version:2.3.0】
     更新内容:
     2.3.0.1、用分类全新重构 BAButton,代码配置更灵活
     2.3.0.2、可以自由设置 button 的文字和图片的布局、间距、每个角的切圆角
     2.3.0.3、全面适配 纯代码、xib、storyboard
     2.3.0.4、版本改动较大,希望大家谅解,如果用老版本的 BAButton,可以参考demo 更换新版本,后期改动不大
    
    */
    
    #endif /* BAButton_h */

    UIButton+BAKit.h

    #import <UIKit/UIKit.h>
    #import "UIView+BARectCorner.h"
    
    NS_ASSUME_NONNULL_BEGIN
    /**
     button 的样式,以图片为基准
     
     - BAKit_ButtonLayoutTypeNormal: button 默认样式:内容居中-图左文右
     - BAKit_ButtonLayoutTypeCenterImageRight: 内容居中-图右文左
     - BAKit_ButtonLayoutTypeCenterImageTop: 内容居中-图上文下
     - BAKit_ButtonLayoutTypeCenterImageBottom: 内容居中-图下文上
     - BAKit_ButtonLayoutTypeLeftImageLeft: 内容居左-图左文右
     - BAKit_ButtonLayoutTypeLeftImageRight: 内容居左-图右文左
     - BAKit_ButtonLayoutTypeRightImageLeft: 内容居右-图左文右
     - BAKit_ButtonLayoutTypeRightImageRight: 内容居右-图右文左
     */
    typedef NS_ENUM(NSInteger, BAKit_ButtonLayoutType) {
        BAKit_ButtonLayoutTypeNormal = 0,
        BAKit_ButtonLayoutTypeCenterImageRight,
        BAKit_ButtonLayoutTypeCenterImageTop,
        BAKit_ButtonLayoutTypeCenterImageBottom,
        BAKit_ButtonLayoutTypeLeftImageLeft,
        BAKit_ButtonLayoutTypeLeftImageRight,
        BAKit_ButtonLayoutTypeRightImageLeft,
        BAKit_ButtonLayoutTypeRightImageRight,
    };
    
    @interface UIButton (BAKit)
    
    /**
     button 的布局样式,默认为:BAKit_ButtonLayoutTypeNormal,注意:文字、字体大小、图片等设置一定要在设置 ba_button_setBAKit_ButtonLayoutType 之前设置,要不然计算会以默认字体大小计算,导致位置偏移
     */
    @property(nonatomic, assign) BAKit_ButtonLayoutType ba_buttonLayoutType;
    
    /*!
     *  文字与图片之间的间距,默认为:0
     */
    @property (nonatomic, assign) CGFloat ba_padding;
    
    /*!
     *  文字或图片距离 button 左右边界的最小距离,默认为:5
     */
    @property (nonatomic, assign) CGFloat ba_padding_inset;
    
    
    #pragma mark - 快速创建 button
    
    /**
     UIButton:快速创建 button1:frame、title、titleColor、titleFont
     
     @param frame frame
     @param title title
     @param titleColor titleColor
     @param titleFont titleFont
     @return button
     */
    + (id)ba_buttonWithFrame:(CGRect)frame
                       title:(NSString * __nullable)title
                  titleColor:(UIColor * __nullable)titleColor
                   titleFont:(UIFont * __nullable)titleFont;
    
    /**
     UIButton:快速创建 button2:frame、title、backgroundColor
     
     @param frame frame
     @param title title
     @param backgroundColor backgroundColor
     @return button
     */
    + (id)ba_buttonWithFrame:(CGRect)frame
                       title:(NSString * __nullable)title
             backgroundColor:(UIColor * __nullable)backgroundColor;
    
    /**
     UIButton:快速创建 button3:frame、title、titleColor、titleFont、backgroundColor
     
     @param frame frame
     @param title title
     @param titleColor titleColor
     @param titleFont titleFont
     @param backgroundColor backgroundColor
     @return button
     */
    + (id)ba_buttonWithFrame:(CGRect)frame
                       title:(NSString * __nullable)title
                  titleColor:(UIColor * __nullable)titleColor
                   titleFont:(UIFont * __nullable)titleFont
             backgroundColor:(UIColor * __nullable)backgroundColor;
    
    /**
     UIButton:快速创建 button4:frame、title、backgroundImage
     
     @param frame frame
     @param title title
     @param backgroundImage backgroundImage
     @return button
     */
    + (id)ba_buttonWithFrame:(CGRect)frame
                       title:(NSString * __nullable)title
             backgroundImage:(UIImage * __nullable)backgroundImage;
    
    /**
     UIButton:快速创建 button5:frame、title、titleColor、titleFont、image、backgroundColor
     
     @param frame frame description
     @param title title description
     @param titleColor titleColor description
     @param titleFont titleFont description
     @param image image description
     @param backgroundColor backgroundColor description
     @return button
     */
    + (instancetype)ba_buttonWithFrame:(CGRect)frame
                                 title:(NSString * __nullable)title
                            titleColor:(UIColor * __nullable)titleColor
                             titleFont:(UIFont * __nullable)titleFont
                                 image:(UIImage * __nullable)image
                       backgroundColor:(UIColor * __nullable)backgroundColor;
    
    /**
     UIButton:快速创建 button6:frame、title、titleColor、titleFont、image、backgroundImage
     
     @param frame frame description
     @param title title description
     @param titleColor titleColor description
     @param titleFont titleFont description
     @param image image description
     @param backgroundImage backgroundImage description
     @return button
     */
    + (instancetype)ba_buttonWithFrame:(CGRect)frame
                                 title:(NSString * __nullable)title
                            titleColor:(UIColor * __nullable)titleColor
                             titleFont:(UIFont * __nullable)titleFont
                                 image:(UIImage * __nullable)image
                       backgroundImage:(UIImage * __nullable)backgroundImage;
    
    /**
     UIButton:快速创建 button7:大汇总-点击事件、圆角
     
     @param frame frame
     @param title title
     @param selTitle selTitle
     @param titleColor titleColor,默认:黑色
     @param titleFont titleFont默认:15
     @param image image description
     @param selImage selImage
     @param padding padding 文字图片间距
     @param buttonLayoutType buttonLayoutType 文字图片布局样式
     @param viewRectCornerType viewRectCornerType 圆角样式
     @param viewCornerRadius viewCornerRadius 圆角角度
     @param target target
     @param sel sel
     @return button
     */
    + (instancetype __nonnull)ba_creatButtonWithFrame:(CGRect)frame
                                                title:(NSString * __nullable)title
                                             selTitle:(NSString * __nullable)selTitle
                                           titleColor:(UIColor * __nullable)titleColor
                                            titleFont:(UIFont * __nullable)titleFont
                                                image:(UIImage * __nullable)image
                                             selImage:(UIImage * __nullable)selImage
                                              padding:(CGFloat)padding
                                  buttonPositionStyle:(BAKit_ButtonLayoutType)buttonLayoutType
                                   viewRectCornerType:(BAKit_ViewRectCornerType)viewRectCornerType
                                     viewCornerRadius:(CGFloat)viewCornerRadius
                                               target:(id __nullable)target
                                             selector:(SEL __nullable)sel;
    
    /**
     UIButton:快速创建 button8:大汇总-所有 normal、selected、highlighted 样式都有
     
     @param frame frame
     @param title title description
     @param selectedTitle selectedTitle description
     @param highlightedTitle highlightedTitle description
     @param titleColor titleColor description
     @param selectedTitleColor selectedTitleColor description
     @param highlightedTitleColor highlightedTitleColor description
     @param titleFont titleFont description
     @param image image description
     @param selectedImage selectedImage description
     @param highlightedImage highlightedImage description
     @param backgroundImage backgroundImage description
     @param selectedBackgroundImage selectedBackgroundImage description
     @param highlightedBackgroundImage highlightedBackgroundImage description
     @param backgroundColor backgroundColor description
     @return button
     */
    + (instancetype)ba_buttonWithFrame:(CGRect)frame
                                 title:(NSString * __nullable)title
                         selectedTitle:(NSString * __nullable)selectedTitle
                      highlightedTitle:(NSString * __nullable)highlightedTitle
                            titleColor:(UIColor * __nullable)titleColor
                    selectedTitleColor:(UIColor * __nullable)selectedTitleColor
                 highlightedTitleColor:(UIColor * __nullable)highlightedTitleColor
                             titleFont:(UIFont * __nullable)titleFont
                                 image:(UIImage * __nullable)image
                         selectedImage:(UIImage * __nullable)selectedImage
                      highlightedImage:(UIImage * __nullable)highlightedImage
                       backgroundImage:(UIImage * __nullable)backgroundImage
               selectedBackgroundImage:(UIImage * __nullable)selectedBackgroundImage
            highlightedBackgroundImage:(UIImage * __nullable)highlightedBackgroundImage
                       backgroundColor:(UIColor * __nullable)backgroundColor;
    
    /**
     UIButton:快速创建一个纯文字 button
     
     @param frame frame description
     @param title title description
     @param font font description
     @param horizontalAlignment horizontalAlignment description
     @param verticalAlignment verticalAlignment description
     @param contentEdgeInsets contentEdgeInsets description
     @param target target description
     @param action action description
     @param normalStateColor normalStateColor description
     @param highlightedStateColor highlightedStateColor description
     @param disabledStateColor disabledStateColor description
     @return UIButton
     */
    + (UIButton *)ba_buttonLabelButtonWithFrame:(CGRect)frame
                                          title:(NSString *)title
                                           font:(UIFont *)font
                            horizontalAlignment:(UIControlContentHorizontalAlignment)horizontalAlignment
                              verticalAlignment:(UIControlContentVerticalAlignment)verticalAlignment
                              contentEdgeInsets:(UIEdgeInsets)contentEdgeInsets
                                         target:(id)target
                                         action:(SEL)action
                               normalTitleColor:(UIColor *)normalStateColor
                          highlightedTitleColor:(UIColor *)highlightedStateColor
                             disabledTitleColor:(UIColor *)disabledStateColor;
    
    /**
     UIButton:快速创建一个纯图片 button
     
     @param frame frame description
     @param horizontalAlignment horizontalAlignment description
     @param verticalAlignment verticalAlignment description
     @param contentEdgeInsets contentEdgeInsets description
     @param normalImage normalImage description
     @param highlightImage highlightImage description
     @param disabledImage disabledImage description
     @param target target description
     @param action action description
     @return UIButton
     */
    + (UIButton *)ba_buttonImageButtonWithFrame:(CGRect)frame
                            horizontalAlignment:(UIControlContentHorizontalAlignment)horizontalAlignment
                              verticalAlignment:(UIControlContentVerticalAlignment)verticalAlignment
                              contentEdgeInsets:(UIEdgeInsets)contentEdgeInsets
                                    normalImage:(UIImage *)normalImage
                                 highlightImage:(UIImage *)highlightImage
                                  disabledImage:(UIImage *)disabledImage
                                         target:(id)target
                                         action:(SEL)action;
    
    #pragma mark - 自定义:button
    /**
     UIButton:自定义 button backgroundColor
     
     @param backgroundColor backgroundColor
     */
    - (void)ba_buttonSetBackgroundColor:(UIColor * __nullable)backgroundColor;
    
    /**
     UIButton:backgroundColor、normalStateColor、highlightedStateColor、disabledStateColor
     
     @param normalStateColor normalStateColor description
     @param highlightedStateColor highlightedStateColor description
     @param disabledStateColor disabledStateColor description
     */
    - (void)ba_buttonBackgroundColorWithNormalStateColor:(UIColor *)normalStateColor
                                   highlightedStateColor:(UIColor *)highlightedStateColor
                                      disabledStateColor:(UIColor *)disabledStateColor;
    
    /**
     UIButton:自定义 button backgroundImage、selectedBackgroundImage、highlightedBackgroundImage
     
     @param backgroundImage backgroundImage
     @param selectedBackgroundImage selectedBackgroundImage
     @param highlightedBackgroundImage highlightedBackgroundImage
     */
    - (void)ba_buttonSetBackgroundImage:(UIImage * __nullable)backgroundImage
                selectedBackgroundImage:(UIImage * __nullable)selectedBackgroundImage
             highlightedBackgroundImage:(UIImage * __nullable)highlightedBackgroundImage;
    
    /**
     UIButton:自定义 button image、selectedImage、highlightedImage、disabledImage
     
     @param image image
     @param selectedImage selectedImage
     @param highlightedImage highlightedImage
     @param disabledImage disabledImage
     */
    - (void)ba_buttonSetImage:(UIImage * __nullable)image
                selectedImage:(UIImage * __nullable)selectedImage
             highlightedImage:(UIImage * __nullable)highlightedImage
                disabledImage:(UIImage * __nullable)disabledImage;
    
    /**
     UIButton:自定义 button title、selectedTitle、highlightedTitle
     
     @param title title
     @param selectedTitle selectedTitle
     @param highlightedTitle highlightedTitle
     */
    - (void)ba_buttonSetTitle:(NSString * __nullable)title
                selectedTitle:(NSString * __nullable)selectedTitle
             highlightedTitle:(NSString * __nullable)highlightedTitle;
    
    /**
     UIButton:自定义 button titleColor、selectedTitleColor、highlightedTitleColor、disabledTitleColor
     
     @param titleColor titleColor
     @param selectedTitleColor selectedTitleColor
     @param highlightedTitleColor highlightedTitleColor
     @param disabledTitleColor disabledTitleColor
     */
    - (void)ba_buttonSetTitleColor:(UIColor * __nullable)titleColor
                selectedTitleColor:(UIColor * __nullable)selectedTitleColor
             highlightedTitleColor:(UIColor * __nullable)highlightedTitleColor
                disabledTitleColor:(UIColor * __nullable)disabledTitleColor;
    
    /**
     UIButton:自定义 button 字体、大小
     
     @param fontName fontName
     @param size size
     */
    - (void)ba_buttonSetTitleFontName:(NSString *)fontName
                                 size:(CGFloat)size;
    
    /**
     UIButton:自定义 button 点击事件,默认:UIControlEventTouchUpInside
     
     @param target target
     @param tag tag
     @param action action
     */
    - (void)ba_buttonAddTarget:(nullable id)target
                           tag:(NSInteger)tag
                        action:(SEL)action;
    
    /**
     UIButton:快速设置 button 的布局样式 和 间距
     
     @param type button 的布局样式
     @param padding 文字与图片之间的间距
     */
    - (void)ba_button_setButtonLayoutType:(BAKit_ButtonLayoutType)type padding:(CGFloat)padding;
    
    /**
     UIButton:快速切圆角,注意:文字、字体大小、图片等设置一定要在设置 ba_button_setButtonLayoutType 之前设置,要不然计算会以默认字体大小计算,导致位置偏移,如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效
     
     @param type 圆角样式
     @param viewCornerRadius 圆角角度
     */
    - (void)ba_button_setViewRectCornerType:(BAKit_ViewRectCornerType)type viewCornerRadius:(CGFloat)viewCornerRadius;
    
    /**
     UIButton:快速切圆角,带边框、边框颜色,如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效
     
     @param type 圆角样式
     @param viewCornerRadius 圆角角度
     @param borderWidth 边线宽度
     @param borderColor 边线颜色
     */
    - (void)ba_button_setViewRectCornerType:(BAKit_ViewRectCornerType)type
                           viewCornerRadius:(CGFloat)viewCornerRadius
                                borderWidth:(CGFloat)borderWidth
                                borderColor:(UIColor *)borderColor;
    
    /**
     UIButton:title 位置
     
     @param horizontalAlignment horizontalAlignment description
     @param verticalAlignment verticalAlignment description
     @param contentEdgeInsets contentEdgeInsets description
     */
    - (void)ba_buttonTitleLabelHorizontalAlignment:(UIControlContentHorizontalAlignment)horizontalAlignment
                                 verticalAlignment:(UIControlContentVerticalAlignment)verticalAlignment
                                 contentEdgeInsets:(UIEdgeInsets)contentEdgeInsets;
    
    /**
     UIButton:给 Button 添加点击音效,注意,此方法不带播放结束回调,如果需要播放结束回调,请将 .m 文件中的 C 函数(soundCompleteCallBack)回调复制到播放按钮的.m 里,在里面做相关处理即可
     
     @param name 音乐文件名称
     @param isNeedShock 是否播放音效并震动
     */
    - (void)ba_buttonPlaySoundEffectWithFileName:(NSString *)name
                                     isNeedShock:(BOOL)isNeedShock;
    
    @end
    
    @interface UIImage (BAButton)
    
    /**
     UIImage:创建一个 纯颜色 图片【全部铺满】
     
     @param color color
     @return 纯颜色 图片
     */
    + (UIImage *)ba_image_Color:(UIColor *)color;
    
    /**
     UIImage:创建一个 纯颜色 图片【可以设置 size】
     
     @param color color
     @param size size
     @return 纯颜色 图片
     */
    + (UIImage *)ba_image_Color:(UIColor *)color size:(CGSize)size;
    
    /**
     UIImage:根据宽比例去缩放图片
     
     @param width width description
     @return UIImage
     */
    - (UIImage *)ba_imageScaleToWidth:(CGFloat)width;
    
    @end
    
    @interface UIView (BAButton)
    
    /**
     UIView:给 View 添加点击音效(一般用于 button 按钮的点击音效),注意,此方法不带播放结束回调,如果需要播放结束回调,请将 .m 文件中的 C 函数(soundCompleteCallBack)回调复制到播放按钮的.m 里,在里面做相关处理即可
     
     @param name 音乐文件名称
     @param isNeedShock 是否播放音效并震动
     */
    - (void)ba_viewPlaySoundEffectWithFileName:(NSString *)name
                                   isNeedShock:(BOOL)isNeedShock;
    
    @end
    
    NS_ASSUME_NONNULL_END
    

    UIView+BARectCorner.h

    #import <UIKit/UIKit.h>
    
    /*!
     *  设置 viewRectCornerType 样式,
     *  注意:BAKit_ViewRectCornerType 必须要先设置 viewCornerRadius,才能有效,否则设置无效,
     */
    typedef NS_ENUM(NSInteger, BAKit_ViewRectCornerType) {
        /*!
         *  设置下左角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomLeft = 0,
        /*!
         *  设置下右角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomRight,
        /*!
         *  设置上左角 圆角半径
         */
        BAKit_ViewRectCornerTypeTopLeft,
        /*!
         *  设置下右角 圆角半径
         */
        BAKit_ViewRectCornerTypeTopRight,
        /*!
         *  设置下左、下右角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomLeftAndBottomRight,
        /*!
         *  设置上左、上右角 圆角半径
         */
        BAKit_ViewRectCornerTypeTopLeftAndTopRight,
        /*!
         *  设置下左、上左角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomLeftAndTopLeft,
        /*!
         *  设置下右、上右角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomRightAndTopRight,
        /*!
         *  设置上左、上右、下右角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomRightAndTopRightAndTopLeft,
        /*!
         *  设置下右、上右、下左角 圆角半径
         */
        BAKit_ViewRectCornerTypeBottomRightAndTopRightAndBottomLeft,
        /*!
         *  设置全部四个角 圆角半径
         */
        BAKit_ViewRectCornerTypeAllCorners
    };
    
    @interface UIView (BARectCorner)
    
    /**
     设置 viewRectCornerType 样式,注意:BAKit_ViewRectCornerType 必须要先设置 viewCornerRadius,才能有效,否则设置无效,如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效
     */
    @property (nonatomic, assign) BAKit_ViewRectCornerType ba_viewRectCornerType;
    
    /**
     设置 view :圆角,如果要全部设置四个角的圆角,可以直接用这个方法,必须要在设置 frame 之后,注意:如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效
     */
    @property (nonatomic, assign) CGFloat ba_viewCornerRadius;
    
    /**
      设置 view :边框边线宽度
     */
    @property(nonatomic, assign) CGFloat ba_viewBorderWidth;
    
    /**
     设置 view :边框边线颜色
     */
    @property(nonatomic, strong) UIColor *ba_viewBorderColor;
    
    
    /**
     快速切圆角
     
     @param type 圆角样式
     @param viewCornerRadius 圆角角度
     */
    - (void)ba_view_setViewRectCornerType:(BAKit_ViewRectCornerType)type
                         viewCornerRadius:(CGFloat)viewCornerRadius;
    
    /**
     快速切圆角,带边框、边框颜色
    
     @param type 圆角样式
     @param viewCornerRadius 圆角角度
     @param borderWidth 边线宽度
     @param borderColor 边线颜色
     */
    - (void)ba_view_setViewRectCornerType:(BAKit_ViewRectCornerType)type
                         viewCornerRadius:(CGFloat)viewCornerRadius
                              borderWidth:(CGFloat)borderWidth
                              borderColor:(UIColor *)borderColor;
    
    
    @end
    

    UIButton+BAState.h

    #import <UIKit/UIKit.h>
    #import <Foundation/Foundation.h>
    NS_ASSUME_NONNULL_BEGIN
    
    @interface UIButton (BAState)
    /**
     * 获取当前borderColor
     */
    @property(nonatomic, readonly, strong) UIColor *ba_currentBorderColor;
    
    /**
     * 获取当前backgroundColor
     */
    @property(nonatomic, readonly, strong) UIColor *ba_currentBackgroundColor;
    
    /**
     * 获取当前titleLabelFont
     */
    @property(nonatomic, readonly, strong) UIFont *ba_currentTitleLabelFont;
    
    /**
     * 切换按钮状态时,执行动画的时间,默认0.25s(只有动画执行完毕后,才能会执行下一个点击事件)
     */
    @property (nonatomic, assign) NSTimeInterval ba_animatedDuration;
    
    /** 
     * 设置不同状态下的borderColor(支持动画效果) 
     */
    - (void)ba_buttonSetborderColor:(UIColor *)borderColor forState:(UIControlState)state animated:(BOOL)animated;
    
    /** 
     * 设置不同状态下的backgroundColor(支持动画效果)
     */
    - (void)ba_buttonSetBackgroundColor:(UIColor *)backgroundColor forState:(UIControlState)state animated:(BOOL)animated;
    
    /** 
     * 设置不同状态下的titleLabelFont 
     */
    - (void)ba_buttonSetTitleLabelFont:(UIFont *)titleLabelFont forState:(UIControlState)state;
    
    /** 
     * 获取某个状态的borderColor 
     */
    - (UIColor *)ba_buttonBorderColorForState:(UIControlState)state;
    
    /** 
     * 获取某个状态的backgroundColor 
     */
    - (UIColor *)ba_buttonBackgroundColorForState:(UIControlState)state;
    
    /** 
     * 获取某个状态的titleLabelFont 
     */
    - (UIFont *)ba_buttonTitleLabelFontForState:(UIControlState)state;
    
    #pragma mark - 使用key-value方式设置
    
    /** 
     * key:@(UIControlState枚举)
     * 注:此方式无动画
     */
    - (void)ba_buttonConfigBorderColors:(NSDictionary <NSNumber *,UIColor *>*)borderColors;
    
    /** 
     * key:@(UIControlState枚举)
     * 注:此方式无动画
     */
    - (void)ba_buttonConfigBackgroundColors:(NSDictionary <NSNumber *,UIColor *>*)backgroundColors;
    
    /** 
     * key:@(UIControlState枚举)
     */
    - (void)ba_buttonConfigTitleLabelFont:(NSDictionary <NSNumber *,UIFont *>*)titleLabelFonts;
    
    @end
    
    NS_ASSUME_NONNULL_END

    UIButton+BACountDown.h

    #import <UIKit/UIKit.h>
    
    typedef void (^BAKit_BAButtonCountDownBlock)(NSInteger currentTime);
    
    @interface UIButton (BACountDown)
    
    @property (nonatomic, copy) void(^timeStoppedCallback)();
    
    /**
     倒计时:带 title,返回时间,title,具体使用看 demo
    
     @param duration 倒计时时间
     @param format 可选,传nil默认为 @"%zd秒"
     */
    - (void)ba_countDownWithTimeInterval:(NSTimeInterval)duration
                         countDownFormat:(NSString *)format;
    
    /**
     倒计时:返回当前时间,可以自定义 title 和 image,具体使用看 demo
     
     @param duration 倒计时时间
     @param block 返回当前时间
     */
    - (void)ba_countDownCustomWithTimeInterval:(NSTimeInterval)duration
                                         block:(BAKit_BAButtonCountDownBlock)block;
    
    /** 
     * 倒计时:结束,取消倒计时
     */
    - (void)ba_cancelTimer;
    
    @end

    demo 示例

    // 示例1:
        // 注意:文字、字体大小、图片等设置一定要在设置         CGFloat padding = 10;
        CGFloat viewCornerRadius = 15;
        
        [self.normalButton ba_button_setButtonLayoutType:BAKit_ButtonLayoutTypeNormal padding:padding];
        
        [self.normalButton ba_button_setViewRectCornerType:BAKit_ViewRectCornerTypeBottomRightAndTopRightAndBottomLeft viewCornerRadius:viewCornerRadius borderWidth:2.0f borderColor:BAKit_Color_RandomRGB()];
        
        
    // 示例2:
    
    - (void)setupNavi
    {
        CGRect frame = CGRectMake(0, 0, 80, 40);
        UIButton *navi_rightButton = [UIButton ba_creatButtonWithFrame:frame title:@"xib" selTitle:nil titleColor:BAKit_Color_Red_pod titleFont:nil image:[UIImage imageNamed:@"tabbar_mainframeHL"] selImage:nil padding:2 buttonPositionStyle:BAKit_ButtonLayoutTypeCenterImageRight viewRectCornerType:BAKit_ViewRectCornerTypeAllCorners viewCornerRadius:20 target:self selector:@selector(handleRightNaviButtonAction:)];
        navi_rightButton.backgroundColor = BAKit_Color_RandomRGB_pod();
        self.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:navi_rightButton];
        
        UIButton *navi_leftButton = [UIButton ba_creatButtonWithFrame:frame title:@"state" selTitle:nil titleColor:BAKit_Color_Red_pod titleFont:nil image:[UIImage imageNamed:@"tabbar_mainframeHL"] selImage:nil padding:2 buttonPositionStyle:BAKit_ButtonLayoutTypeCenterImageRight viewRectCornerType:BAKit_ViewRectCornerTypeAllCorners viewCornerRadius:20 target:self selector:@selector(handleLeftNaviButtonAction:)];
        [navi_rightButton ba_view_setViewRectCornerType:BAKit_ViewRectCornerTypeBottomLeftAndTopLeft viewCornerRadius:20 borderWidth:2.0f borderColor:BAKit_Color_RandomRGB_pod()];
        navi_rightButton.backgroundColor = BAKit_Color_RandomRGBA_pod();
        self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithCustomView:navi_leftButton];
    }
    
    - (void)handleLeftNaviButtonAction:(UIButton *)sender
    {
        // 添加按钮点击音效和震动效果
        [sender ba_viewPlaySoundEffectWithFileName:@"begin.mp3" isNeedShock:YES];
        [self.navigationController pushViewController:[ViewController3 new] animated:YES];
    }
    
    - (void)handleRightNaviButtonAction:(UIButton *)sender
    {
        // 添加按钮点击音效和震动效果
        [sender ba_viewPlaySoundEffectWithFileName:@"failure.mp3" isNeedShock:YES];
        [self.navigationController pushViewController:[ViewController2 new] animated:YES];
    }
    
    // 示例3:倒计时
    - (IBAction)countDownClick:(UIButton *)sender {
        sender.userInteractionEnabled = NO;
        __block UIButton *btn = sender;
        [sender ba_countDownCustomWithTimeInterval:5 block:^(NSInteger currentTime) {
            // 此处是可以自由定制 title 和 image
            NSString *title = [NSString stringWithFormat:@"Countdown_0%ld", (long)currentTime];
            dispatch_async(dispatch_get_main_queue(), ^{
                [btn setTitle:nil forState:UIControlStateNormal];
                [btn setBackgroundImage:BAKit_ImageName(title) forState:UIControlStateNormal];
            });
        }];
    
        [sender setTimeStoppedCallback:^{
            [btn setTitle:@"倒计时" forState:UIControlStateNormal];
        }];
    }
    
    - (IBAction)skipClick:(UIButton *)sender {
        __block UIButton *btn = sender;
        [sender ba_countDownWithTimeInterval:5 countDownFormat:@"跳过 %zd"];
        [sender setTimeStoppedCallback:^{
            [btn setTitle:@"跳过" forState:UIControlStateNormal];
        }];
    }
    
    // 示例4:测试大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局
    - (void)test2
    {
        self.button.hidden = NO;
    }
    
    - (void)viewDidLayoutSubviews {
        [super viewDidLayoutSubviews];
        
        CGFloat min_x = 0;
        CGFloat min_y = 0;
        CGFloat min_w = 0;
        CGFloat min_h = 0;
        
        min_x = 100;
        min_y = 100;
        min_w = BAKit_SCREEN_WIDTH - min_x * 2;
        min_h = min_w;
        self.button.frame = CGRectMake(min_x, min_y, min_w, min_h);
        
        // 根据宽比例去缩放图片,注意:如果button 的图片 太宽,需要调用此方法去等比压缩图片,压缩完的图片,记得要在frame 之后设置图片
        UIImage *stretchableButtonImage = [[UIImage imageNamed:@"条形码.jpg"] ba_imageScaleToWidth:_button.frame.size.width];
        [_button setImage:stretchableButtonImage forState:UIControlStateNormal];
        
        // button 图文布局也要在图片设置之后设置才能有效
        _button.ba_buttonLayoutType = BAKit_ButtonLayoutTypeCenterImageTop;
    }
    
    #pragma mark - 测试大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局
    - (UIButton *)button
    {
        if (!_button)
        {
            // 测试大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局
            // 原生写法
            //        _button = [UIButton buttonWithType:UIButtonTypeCustom];
            //        [_button setTitle:@"123456" forState:UIControlStateNormal];
            //        [_button setTitleColor:BAKit_Color_Red_pod forState:UIControlStateNormal];
            //        _button.backgroundColor = BAKit_Color_Gray_10_pod;
            
            // BAButton 简单写法
            _button = [UIButton ba_buttonWithFrame:CGRectZero title:@"123456" titleColor:BAKit_Color_Red_pod titleFont:[UIFont systemFontOfSize:15] backgroundColor:BAKit_Color_Gray_10_pod];
            
            [self.view addSubview:_button];
        }
        return _button;
    }
    
    其他示例可下载demo查看源码!

    5、更新记录:【倒叙】

    欢迎使用 【BAHome】 系列开源代码 !
    如有更多需求,请前往:【https://github.com/BAHome】

    最新更新时间:2017-08-15 【倒叙】

    最新 Version:【Version:2.6.2】

    更新内容:

    2.6.2.1、优化倒计时封装,线程处理优化

    最新更新时间:2017-08-14 【倒叙】

    最新 Version:【Version:2.6.1】

    更新内容:

    2.6.1.1、新增 倒计时按钮纯图片更换,详情请看 倒计时 demo

    最新更新时间:2017-08-12 【倒叙】

    最新Version:【Version:2.6.0】

    更新内容:

    2.6.0.1、新增 按钮点击音效和震动效果封装

    最新更新时间:2017-08-03 【倒叙】

    最新Version:【Version:2.5.9】

    更新内容:

    2.5.9.1、修复 UIButton:快速创建 button4:frame、title、backgroundImage 方法死循环bug(感谢群里 @杭州-秦小强 11:52:23 同学提出的 bug!)

    最新更新时间:2017-07-19 【倒叙】

    最新Version:【Version:2.5.8】

    更新内容:

    2.5.8.1、新增 两种快速创建 button 的方法:1、快速创建纯文字 button,2、快速创建纯图片 button

    2.5.8.2、新增 单独配置文字位置的封装

    2.5.8.3、新增 字体颜色、背景颜色、image 等的 disabled 状态下的配置

    最新更新时间:2017-07-08 【倒叙】

    最新Version:【Version:2.5.6】

    更新内容:

    2.5.6.1、删除 高亮、选中 背景颜色,以免默认情况下回自动加高亮颜色

    最新更新时间:2017-07-07 【倒叙】

    最新Version:【Version:2.5.5】

    更新内容:

    2.5.5.1、重构 <UIButton+BAKit.h>类,新增多种快速创建 button 的方法

    2.5.5.2、新增多种快速创建 自定义 button 的方法

    最新更新时间:2017-06-27 【倒叙】

    最新Version:【Version:2.5.4】

    更新内容:

    2.5.4.1、新增 大图片 button 的 layout 布局,如果你的图片宽高大于 自身的宽高,则需要压缩后再配置布局,具体看 demo test2

    最新更新时间:2017-06-23 【倒叙】

    最新Version:【Version:2.5.3】

    更新内容:

    2.5.3.1、优化部分宏定义

    最新更新时间:2017-06-23 【倒叙】

    最新Version:【Version:2.5.2】

    更新内容:

    2.5.2.1、优化部分宏定义

    最新更新时间:2017-06-20 【倒叙】

    最新Version:【Version:2.5.1】

    更新内容:

    2.5.1.1、新增 view 的 border 的创建,可以自定义圆角、边框、边框颜色等(感谢群里 @北京-大腿 同学提出的 需求!)

    2.5.1.2、修复 xib 下圆角右边无效的bug,注意:如果是 xib,需要要有固定 宽高,要不然 iOS 10 设置无效(感谢群里 @北京-小黑 同学提出的 bug!)

    最新更新时间:2017-06-19 【倒叙】

    最新Version:【Version:2.5.0】

    更新内容:

    2.5.0.1、优化命名规范,更换了全局统一属性命名和方法命名,如果更新有报错的地方,大家别急,看 .h 文件更换过来即可,后期推出的 BAKit 系列产品,命名都将统一规范,在此给大家带来的不便之处,向大家道歉!希望大家谅解!多谢体谅!

    最新更新时间:2017-06-01 【倒叙】

    最新Version:【Version:2.4.3】

    更新内容:

    2.4.3.1、快速创建 button 方法改为类方法,可直接调用!

    最新更新时间:2017-06-01 【倒叙】

    最新Version:【Version:2.4.2】

    更新内容:

    2.4.2.1、优化注释

    最新更新时间:2017-06-01 【倒叙】

    最新Version:【Version:2.4.1】

    更新内容:

    2.4.1.1、优化注释,注意:文字、字体大小、图片等设置一定要在设置 ba_button_setBAButtonLayoutType 之前设置,要不然计算会以默认字体大小计算,导致位置偏移

    最新更新时间:2017-05-27 【倒叙】

    最新Version:【Version:2.4.0】

    更新内容:

    2.4.0.1、此版本由 子丰大神 亲自改版,再次感谢 子丰大神

    2.4.0.2、新增 UIButton 各种状态下背景颜色、字体、border、font、动画等的监测及改变

    2.4.0.3、新增 UIButton 倒计时的封装,两行代码搞定倒计时!

    2.4.0.4、优化整体代码结构,代码规范!

    最新更新时间:2017-05-26 【倒叙】

    最新Version:【Version:2.3.2】

    更新内容:

    2.3.2.1、优化代码结构,修复 frame 改变后 padding 无法更改的问题!

    最新更新时间:2017-05-24 【倒叙】

    最新Version:【Version:2.3.1】

    更新内容:

    2.3.1.1、新增:padding_inset,文字或图片距离 button 左右边界的最小距离,默认为:5

    最新更新时间:2017-05-20 【倒叙】
    最新Version:【Version:2.3.0】

    更新内容:

    2.3.0.1、用分类全新重构 BAButton,代码配置更灵活

    2.3.0.2、可以自由设置 button 的文字和图片的布局、间距、每个角的切圆角

    2.3.0.3、全面适配 纯代码、xib、storyboard

    2.3.0.4、版本改动较大,希望大家谅解,如果用老版本的 BAButton,可以参考demo 更换新版本,后期改动不大

    • 2017-04-24

      最新Version:【Version:2.2.1】

    更新内容:

    2.2.1.1、新增快速创建button 的demo,和 自定义 naviButton demo

    • 2017-03-15

      最新Version:【Version:2.2.1】

    更新内容:

    2.2.1.1、button 的 角半径 buttonCornerRadii,默认 CGSizeMake(0, 0)

    • 2017-03-02

      最新Version:【Version:2.2.0】

    更新内容:

    2.2.0.1、修复 buttonCornerRadii 只能在添加frame 后设置才能有效的问题,现在可以随意设置

    2.2.0.2、新增设置文字或和图片间距,举个

    我来说两句
    *滑动验证:
    所有评论(5)
    逆鳞九霄 2017-8-15 15:52:54
    楼主威武啊,Code4App有你更给力!
    回复
    littleRed 2017-8-15 15:53:07
    膜拜大神~
    回复
    hellokenken 2017-8-15 15:53:21
    学习...学习...
    回复
    kengsir 2017-8-15 15:53:42
    我是来学习的
    回复
    AlonMessi 2017-8-15 15:53:57
    好好 学习了 确实不错
    回复
    phoiu 2017-8-15 15:53:58
    帮帮顶顶!!
    回复
    BlueManlove 2017-8-15 15:54:57
    mark,收藏了
    回复
    code4app热心网友 2017-8-16 08:29:08
    虽不明,但觉厉!
    回复
    code4app热心网友 2017-8-16 09:04:18
    很给力,Code4App有你更精彩!
    回复
    提取码:  下载次数:32 状态:已购或VIP 售价:0(原价:10)金钱 下载权限:初级码农 
    693 1 32
    联系我们
    首页/微信公众账号投稿

    帖子代码编辑/版权问题

    QQ:435399051,742864542

    如何获得代码达人称号?

    代码贡献英雄榜
    用户名 下载数
    通过邮件订阅最新 Code4App 信息
    上一条 /4 下一条
    联系我们
    关闭
    合作电话:
    13802416937
    Email:
    435399051@qq.com
    商务市场合作/投稿
    问题反馈及帮助
    联系我们

    广告投放| Github|申请友链|手机版|Code4App ( 粤ICP备15117877号-1 )

    快速回复 返回顶部 返回列表