Swift-Button 的 highlighted(高亮)
摘要
在学习小程序时,看到小程序中的一个样式属性
hover-class,通过设置这个属性,就可以给点击的控件添加一个高亮效果。所以也就萌生了在 Swift 也实现一个类似的功能的想法,开干。下面代码是给 view 控件添加一个高亮效果,高亮时,页面的背景颜色会 0.8 的透明度显示
// html 页面
<view class="tool-bar my-class"
hover-class="hover"
hover-stay-time="50">
<image src="{{icon}}"/>
<text>{{title}}</text>
</view>
// css 页面
.hover {
opacity: .8;
}
设置 Button
先敲定一个简单的需求,设置一个按钮的背景颜色,当按钮高亮状态时,背景颜色 0.8 透明度显示。
看 UIButton 类中,setBackgroundImage(, for: ) 函数,可以让按钮在默认状态(.normal)和高亮状态(.highlighted)下,显示不同的背景图片,这里可以通过 color 来创建纯色的图片处理。
// MARK: - 设置按钮高亮
/// 设置按钮背景和高亮状态颜色
///
/// 设置的 color 是按钮背景颜色,高亮状态下,背景颜色会有 0.8 的 alpha
///
/// - Parameter color: 背景颜色
func setBackgroundAndHighlighted(with color: UIColor) {
self.btn.setBackgroundImage(getImageFrom(color: color), for: .normal)
self.btn.setBackgroundImage(getImageFrom(color: color.withAlphaComponent(0.8)), for: .highlighted)
}
实现代码的时候,使用了函数 withAlphaComponent,它属于 UIColor 类的,达到的效果是,将 color 颜色设置它的 alpha,返回一个新的 color 对象。
这个方法专门测试一下啊,比如 0.8 的 white,使用这个函数设置成 0.6 时,返回的是 0.6 的 white,而不是 0.8x0.6 的 white。
创建单色 image
下面代码是创建单色 image,给到按钮,这里使用的是 UIGraphics 框架处理图片。
/// 设置单色图片
/// - Parameter color: 颜色
/// - Returns: 返回该颜色图片
func getImageFrom(color: UIColor) -> UIImage? {
let rect = CGRect(x: 0, y: 0, width: 1, height: 1)
UIGraphicsBeginImageContext(rect.size)
guard let context = UIGraphicsGetCurrentContext() else {
print(" UIGraphicsGetCurrentContext 不存在")
UIGraphicsEndImageContext()
return nil
}
context.setFillColor(color.cgColor)
context.fill(rect)
let img = UIGraphicsGetImageFromCurrentImageContext()
UIGraphicsEndImageContext()
return img
}
Highlighted(高亮)
需求是实现完了,接下来看一下 Highlighted 是什么:

highlighted 是控件的高亮显示,这里首先明确了它属于 UIControl 类。那么怎么理解高亮显示呢?释义这样说,当触摸事件进入控件的边界时,控件会高亮显示;当触摸事件离开(比如点击按钮时,松开按钮,touch-up)或者超出控件的边界时,控件会失去高亮显示。并且可以通过 isHighlighted 属性查看控件是否高亮状态,也可以设置它,让控件保持高亮或者非高亮状态。
Event(事件)
看 highlighted 的释义中多次提到触摸事件,那么顺势看看能影响到高亮的几个触摸事件,先上总结:
touchDown是手指按到控件的操作;touchDrag是手指在控件中拖动的操作;touchUp是手指从控件中松开的操作;- 最后一个
touchCancle就是关闭操作。
如果理解,就简单过一下代码块
/// 点击事件
public static var touchDown: UIControl.Event { get }
/// 重复点击事件
public static var touchDownRepeat: UIControl.Event { get }
/// 被拖动到控件边界内事件
public static var touchDragInside: UIControl.Event { get }
/// 被拖动到控件边界外事件
public static var touchDragOutside: UIControl.Event { get }
/// 被拖动到控件边界事件
public static var touchDragEnter: UIControl.Event { get }
/// 手指从控件内拖动到它的边界外事件
public static var touchDragExit: UIControl.Event { get }
/// 当手指在控件边界内的事件
public static var touchUpInside: UIControl.Event { get }
/// 当手指超出控件边界中的事件
public static var touchUpOutside: UIControl.Event { get }
/// 取消当前触摸的系统事件
public static var touchCancel: UIControl.Event { get }
依据 heighlighted 释义并多次测试之后,推断当 touchDown 时候 heighlighted 高亮, 当 touchDrageOutside、touchUpInside 或者 touchDragExit 时,heightlighted 没有高亮效果。
之后就可以设置这几个点击事件,去自定义是否高亮事件,以及做对应的事件处理。
Button 为什么可以设置高亮?
看代码结构,UIButton 是继承自 UIControl 的,而 UIButton 类中只是设置样式等函数,关于 Event 事件都在 UIControl 类中。
那么就可以大致梳理一下,UIControl 中有监听 Event 事件的方法,通过监听 Event 的不同 State,设置 isHighlighted,然后 isHighlighted 的属性监听检测到变化时,处理 UIButton 中提前设置的代码。
由此可以总结,UIButton 就是一个对 UIControl 和 View 的封装,只要是继承 UIControl 类的子类,都可以使用它的高亮属性,或者自定义高亮监听相关事件。
Swift-Button 的 highlighted(高亮)的更多相关文章
- swift button一些简单设置
1,按钮的创建(1)按钮有下面四种类型: UIButtonType.ContactAdd:前面带“+”图标按钮,默认文字颜色为蓝色,有触摸时的高亮效果 UIButtonType.DetailDiscl ...
- swift 取消UIButton选中高亮状态
objc可以用通过重写setHighlighted方法来达到当按钮选中时的高亮状态 -(void)setHighlighted:(BOOL)highlighted{ } swift中取消高亮状态 ov ...
- SWIFT Button的基本用法
import UIKit @UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate { var window: ...
- iOS -Swift 3.0 -UIButton属性大全
// // ViewController.swift // Swift-UIButton // // Created by luorende on 16/9/9. // Copyright © ...
- ios UIButton设置高亮状态下的背景色
一,通过按钮的事件来设置背景色 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 - (void)viewDidLoad { [ ...
- swift学习之UIButton
// // ViewController.swift // button // // Created by su on 15/12/7. // Copyright © 2015年 tian. ...
- iOS开发--Swift 最近项目开发中遇到的一些小问题与解决方法
1, Swift 修改导航栏颜色 self.navigationController?.navigationBar.barTintColor 2, Swift button 属性设置时直接进行初始化 ...
- 【Facebook的UI开发框架React入门之九】button简单介绍(iOS平台)-goodmao
--------------------------------------------------------------------------------------------------- ...
- 一键生成通用高亮代码块到剪贴板,快捷粘贴兼容 TT/WX/BJ 编辑器
有些在线图文编辑器不支持直接插入代码块,但可以直接粘贴 HTML 格式的高亮代码块. 花了一点时间研究了一下各家的编辑器,规则却各不相同.有的要求代码块被包含于 <code> ... &l ...
- iOS - UIButton
前言 NS_CLASS_AVAILABLE_IOS(2_0) @interface UIButton : UIControl <NSCoding> @available(iOS 2.0, ...
随机推荐
- English Study!
As you konw, education is a top priority for us ! When the times abandon you, they don't even call ...
- Python开发篇——如何在Flask下编写JWT登录
首先,HTTP 是无状态的协议(对于事务处理没有记忆能力,每次客户端和服务端会话完成时,服务端不会保存任何会话信息)--每个请求都是完全独立的,服务端无法确认当前访问者的身份信息,无法分辨上一次的请求 ...
- VUE SpringCloud 跨域资源共享 CORS 详解
VUE SpringCloud 跨域资源共享 CORS 详解 作者: 张艳涛 日期: 2020年7月28日 本篇文章主要参考:阮一峰的网络日志 » 首页 » 档案 --跨域资源共享 CORS 详解 ...
- Django < 2.0.8 任意URL跳转漏洞(CVE-2018-14574)
影响版本 Django < 2.0.8 抓包 访问http://192.168.49.2:8000//www.example.com,即可返回是301跳转到//www.example.com
- Mybatis-初见
目录 介绍 示例 搭建环境 创建一个模块 CURD 万能Map 配置解析 环境配置 environments 属性 properties 类型别名 typeAliases 其他配置 映射器 mappe ...
- Flutter集成高德定位和地图功能
定位集成 配置高德定位依赖库 新建 Flutter 项目,使用 Android Studio 打开项目里的 android 工程,或者右键 android 目录-> flutter -> ...
- 学习vue过程中遇到的问题
1.vue-quill-editor动态禁用 项目中把vue-quill-editor单独封装成了一个组件,通过props传递readOnly参数来设置是否禁用editor.开发中发现可以实现禁用效果 ...
- 跟我一起写 Makefile(五)
六.多目标 Makefile的规则中的目标可以不止一个,其支持多目标,有可能我们的多个目标同时依赖于一个文件,并且其生成的命令大体类似.于是我们就能把其合并起来.当然,多个目标的生成规则的执行命令是同 ...
- 跟我一起写 Makefile(二)
三.make是如何工作的 在默认的方式下,也就是我们只输入make命令.那么, 1.make会在当前目录下找名字叫"Makefile"或"makefile"的文 ...
- Goland 这些技巧,学会开发效率翻倍!
hi, 大家好,我是 hhf. <Goland 这些实操技巧,你可能还不会!>介绍了日常开发中一些比较好用的技巧.本篇文章继续介绍一些其他比较好用的技巧. 自定义结构 tag Goland ...