git 仓库地址:https://gitee.com/kmyhy/content-button

App 中经常会用到这样的按钮,当你点击它,它会显示一个 loading 图标并不停地转圈(小菊花),表示它正在异步加载某些数据,当加载完成,按钮才恢复原样:

这正是 ContentButton 能为你做的。它的使用非常简单,直接将源文件放到你的项目中即可:

  • ContentButton.swift

ContentButton 还用到了一个 UIColor 的扩展函数 init(hexString: ),定义在下面的文件中,你可能还需要引入它:

  • UIColor+extension.swift

然后你就可以在你的 ViewController 中使用 ContentButton 了。最简单的方式是通过故事板。拖一个 UIButton 到你的 ViewController,修改 class 为 ContentButton。然后你可以像使用普通的 UIButton 一样,为它创建 IBOutlet 和 IBAction 连接,并定制它的外观,文本、字体、颜色、圆角等等。

当前 ContentButton 支持 4 种 style,它们的外观和 loading 效果正如上面的截屏所示。你可以在 viewDidLoad 方法中,为 contentButton 指定一种 style。

    override func viewDidLoad() {super.viewDidLoad()lightStyleButton.style = .lightdarkStyleButton.style = .darkunderlinedStyleButton.style = .underlinediconStyleButton.style = .icon}

在 IBAction 方法中,改变 ContentButton 的 content 属性,使它在必要的时候显示 loading 动画,然后切换回正常状态(注意在主线程中)。

    @IBAction func contentButtonAction(_ sender: ContentButton) {sender.content = .inProgressDispatchQueue.global().async {// do somethingDispatchQueue.main.asyncAfter(deadline: .now()+2.0) {sender.content = .default}}}

content 属性有两个取值:

  • .inProgress :disabled 状态下显示 loading 动画
  • .default : normal 状态

值得注意的是 icon style,它需要你为 ContentButton 提供两张,图片,一张用于正常状态的按钮背景,一张用于 loading 状态,比如 demo 中所用的这两张:

将这两张图片分别用于 ContentButton 的 Default 状态和 Disabled 状态,icon style 将能正常工作。

Swift 自定义 Loading 按钮 ContentButton相关推荐

  1. Swift自定义导航栏返回按钮

    如何去除swift系统自带的导航栏返回按钮?可以自定义返回按钮 在swift中,怎么替换系统自带的导航栏返回按钮?比如说我要替换成一张返回按钮图片,点击返回到上一页 首先,看一下系统自带的导航栏返回按 ...

  2. 今日分享-自定义返回按钮(与系统按钮位置一致)

    首先来看三张图: 代码已贴出在图片下方 无文字返回按钮设置: [[UIBarButtonItem appearance] setBackButtonTitlePositionAdjustment:UI ...

  3. swift 自定义滑动视图_在Swift中创建一个向上滑动菜单视图(以编程方式)

    swift 自定义滑动视图 This is a quick tutorial on how to create a slide-up menu view in iOS 这是有关如何在iOS中创建向上滑 ...

  4. android 自定义loading,Android自定义动画-StarLoadingView

    今天来分享第二个自定义loading的动画,起了个名字叫 蹦跶的星星 ,还是老规矩先介绍,后上图. 实现效果在最后,GIF有点大,手机流量慎重. 介绍 首先声明做这个动画的初衷是为了学习和分享,所以从 ...

  5. iOS 自定义返回按钮,保留系统滑动返回

    1.简介 使用苹果手机,最喜欢的就是用它的滑动返回.作为一个开发者,我们在编写很多页面的时候,总是会因为这样那样的原因使得系统的滑动返回不可用.使用导航栏push出一个控制器,我们在控制器中自定义了一 ...

  6. 从Chrome中的css自定义样式按钮中删除蓝色边框

    本文翻译自:Remove blue border from css custom-styled button in Chrome I'm working on a web page, and I wa ...

  7. 使用自定义的按钮替换默认的input type='file'

    可以通过让默认的input type = 'file'按钮透明度变为0,并且让它刚好覆盖在自定义的按钮上,来实现此效果: 将它写成一个jQuery插件: (function($){$.fn.brows ...

  8. Winform中实现自定义水晶按钮控件(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个用户 ...

  9. Android 自定义Button按钮显示样式(正常、按下、获取焦点)

    2019独角兽企业重金招聘Python工程师标准>>> 现在的用户对APP的外观看得很重要,如果APP内所有元件都用Android默认样式写,估计下面评论里就有一堆在骂UI丑的.今天 ...

最新文章

  1. 笔记-项目立项管理-项目建议书
  2. Spring框架中的9种设计模式汇总
  3. 崩溃日志记录Landroid/support/v4/animation/AnimatorCompatHelper
  4. c语言动态规划公共字符串,最长公共子串 C语言 动态规划
  5. nginx与IIS服务器搭建集群实现负载均衡(一)
  6. V-最大公约数 递归
  7. c++中父类子类对象指针相互转换,成员函数调用方式
  8. Python实现基于TF-IDF抽取文本数据关键词
  9. Java课程设计报告
  10. USBCAN 、便携式 CAN 分析仪 、CAN卡
  11. 前端框架Vue(15)——vue-cli 仿网易云音乐 Demo,环境搭建到开发 Vue 全家桶练手项目
  12. 按照特定名字批量创建文件夹
  13. 深度卷积神经网络(一)
  14. 关于新浪微博开放平台第三方登录接口问题
  15. blendshape变形器详细解释
  16. 疫情危机中看待业务韧性
  17. python爬虫selenium和bs4_python爬虫――selenium+bs4爬取选股宝‘利好‘or’利空'股票信息...
  18. 职场饭桌:酒桌上的规矩,与领导吃饭如何谈话
  19. 解决_使用大白菜软件安装纯净版win有预装软件的问题
  20. matlab示波器绘图工具,快速绘制Simulink示波器波形

热门文章

  1. 2020年,直播还是一门好生意吗?
  2. java netty教程_Netty学习教程之基础使用篇
  3. AutoCAD 开发文档,AutoLISP 教程,.Net AutoCAD开发教程,VB AutoCAD开发教程,ObjectARX 开发指南,VBA AutoCAD开发教程,ActiveX 开发指南
  4. Nginx代理时客户端容易荡掉
  5. ubuntu18.04安装编译运行PL-SLAM
  6. matlab中cell2mat函数不能生成矩阵的问题
  7. 毕业设计-基于微信小程序的社区健康教育系统
  8. java 判断实体类是否为空_如何判断一个实体类是否为空
  9. RTOS——RT-Thread快速入门
  10. Apache中的Indexes和ExecCGI代码