Swift5学习之旅之UISlider(滑块控制)、UIStepper(步进控制)

2023-11-02 15:08

本文主要是介绍Swift5学习之旅之UISlider(滑块控制)、UIStepper(步进控制),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Swift5学习之旅----UISlider(滑块控制)、UIStepper(步进控制)

在这里插入图片描述

  • UISlider

相关功能代码

import UIKitclass MySlider: UISlider {override init(frame: CGRect) {super.init(frame: frame)}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}func slider(){self.minimumValue = 0.0self.maximumValue = 100.0self.setValue(20, animated: true)//两端的图标、滑动条的颜色self.minimumValueImage = UIImage(systemName: "slider.horizontal.3")self.maximumValueImage = UIImage(systemName: "slider.horizontal.below.rectangle")self.minimumTrackTintColor = UIColor.blackself.maximumTrackTintColor = UIColor.gray
//        self.minimumTrackImage(for: .highlighted)// 滑块滑动停止后才触发ValueChanged事件self.isContinuous = false//滑块的设计self.thumbTintColor = UIColor.greenself.setThumbImage(UIImage(systemName: "heart"), for: .normal)self.setThumbImage(UIImage(systemName: "heart"), for: .highlighted)}}
  • 根据Slider、Stepper自定义贝塞斯达曲线

在这里插入图片描述

import UIKitclass CircleProgressView: UIView {let circleLayer = CAShapeLayer()let progressLayer = CAShapeLayer()
//    var progress: CGFloat = 0.0override init(frame: CGRect){super.init(frame: frame)draw(frame)}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}override func draw(_ rect: CGRect) {super.draw(rect)//画出一个环形的layercircleLayer.frame = self.boundsself.layer.addSublayer(circleLayer)circleLayer.fillColor = UIColor.clear.cgColorcircleLayer.strokeColor = UIColor.gray.cgColorcircleLayer.opacity = 0.2circleLayer.lineWidth = 5//勾勒layer的轨迹,贝塞斯达曲线let path: UIBezierPath = UIBezierPath(arcCenter: CGPoint(x: frame.size.width / 2.0, y: frame.size.height / 2.0), radius: 90, startAngle: CGFloat(Double.pi * -210) / 180.0, endAngle: CGFloat(Double.pi * 30) / 180.0, clockwise: true)circleLayer.path = path.cgPath//设置进度layerprogressLayer.frame = boundsprogressLayer.fillColor = UIColor.clear.cgColorprogressLayer.strokeColor = UIColor.red.cgColorprogressLayer.lineCap = .roundprogressLayer.lineWidth = 9progressLayer.path = path.cgPathprogressLayer.strokeEnd = 0.2self.layer.addSublayer(progressLayer)}}
  • UIStepper
    相关代码
import UIKitclass MyStepper: UIStepper {override init(frame: CGRect) {super.init(frame: frame)self.maximumValue = 100self.minimumValue = 0self.value = 20self.stepValue = 1//设置stepper可以按住不放连续更改值self.isContinuous = true}required init?(coder: NSCoder) {fatalError("init(coder:) has not been implemented")}
}
  • 三者之间的联系实现
class ViewController: UIViewController {
//    let frame:CGRect = CGRect(x: 100, y: 400, width: 300, height: 300)override func viewDidLoad() {super.viewDidLoad()// Do any additional setup after loading the view.let slider = MySlider(frame: CGRect(x: 40, y: 100, width: self.view.bounds.width - 100, height: 40))slider.tag = 997slider.slider()self.view.addSubview(slider)let label = Mylabel(frame: CGRect(x: 80, y: 200, width: 200, height: 40))label.tag = 1000self.view.addSubview(label)// 响应事件slider.addTarget(self, action: #selector(sliderValueChange(slider:)), for: UIControl.Event.valueChanged)let activityIndicator = MyActivity(frame: CGRect(x: 50, y: 300, width: 50, height: 50))self.view.addSubview(activityIndicator)let circle = CircleProgressView(frame: CGRect(x: 100, y: 400, width: 300, height: 300))circle.tag = 999self.view.addSubview(circle)let stepper = MyStepper(frame: CGRect(x: 100, y: 700, width: 100, height: 100))stepper.addTarget(self, action: #selector(stepperValueChange(stepper:)), for: .valueChanged)stepper.tag = 998self.view.addSubview(stepper)}@objc func sliderValueChange(slider: UISlider){let value = slider.valuelet stepper = self.view.viewWithTag(998) as! UIStepperstepper.value = Double(value)let lab: UILabel = self.view.viewWithTag(1000) as! UILabellab.text = String(format: "slider当前值为:%.2f", arguments: [value])let circleView: CircleProgressView = self.view.viewWithTag(999) as! CircleProgressViewcircleView.progressLayer.strokeEnd = CGFloat(value/100)print("slider当前值是\(value)")}@objc func stepperValueChange(stepper: UIStepper){let value = stepper.valuelet slider = self.view.viewWithTag(997) as! UISliderslider.value = Float(value)stepper.value = Double(value)let lab: UILabel = self.view.viewWithTag(1000) as! UILabellab.text = String(format: "slider当前值为:%.2f", arguments: [value])let circleView: CircleProgressView = self.view.viewWithTag(999) as! CircleProgressViewcircleView.progressLayer.strokeEnd = CGFloat(value/100)print("slider当前值是\(value)")}
}
  • 整体代码

Github还没上传,先用着Dropbox吧,看完有收获的感谢点个赞👍

Dropbox连接
https://www.dropbox.com/sh/g1l8cqg5jp5j5a9/AAAli9UDDtDls00DfZWISc-Ha?dl=0
Dropbox Slider

这篇关于Swift5学习之旅之UISlider(滑块控制)、UIStepper(步进控制)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/331444

相关文章

用js控制视频播放进度基本示例代码

《用js控制视频播放进度基本示例代码》写前端的时候,很多的时候是需要支持要网页视频播放的功能,下面这篇文章主要给大家介绍了关于用js控制视频播放进度的相关资料,文中通过代码介绍的非常详细,需要的朋友可... 目录前言html部分:JavaScript部分:注意:总结前言在javascript中控制视频播放

Python异步编程中asyncio.gather的并发控制详解

《Python异步编程中asyncio.gather的并发控制详解》在Python异步编程生态中,asyncio.gather是并发任务调度的核心工具,本文将通过实际场景和代码示例,展示如何结合信号量... 目录一、asyncio.gather的原始行为解析二、信号量控制法:给并发装上"节流阀"三、进阶控制

使用DrissionPage控制360浏览器的完美解决方案

《使用DrissionPage控制360浏览器的完美解决方案》在网页自动化领域,经常遇到需要保持登录状态、保留Cookie等场景,今天要分享的方案可以完美解决这个问题:使用DrissionPage直接... 目录完整代码引言为什么要使用已有用户数据?核心代码实现1. 导入必要模块2. 关键配置(重点!)3.

SpringSecurity 认证、注销、权限控制功能(注销、记住密码、自定义登入页)

《SpringSecurity认证、注销、权限控制功能(注销、记住密码、自定义登入页)》SpringSecurity是一个强大的Java框架,用于保护应用程序的安全性,它提供了一套全面的安全解决方案... 目录简介认识Spring Security“认证”(Authentication)“授权” (Auth

python之流程控制语句match-case详解

《python之流程控制语句match-case详解》:本文主要介绍python之流程控制语句match-case使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录match-case 语法详解与实战一、基础值匹配(类似 switch-case)二、数据结构解构匹

Java进阶学习之如何开启远程调式

《Java进阶学习之如何开启远程调式》Java开发中的远程调试是一项至关重要的技能,特别是在处理生产环境的问题或者协作开发时,:本文主要介绍Java进阶学习之如何开启远程调式的相关资料,需要的朋友... 目录概述Java远程调试的开启与底层原理开启Java远程调试底层原理JVM参数总结&nbsMbKKXJx

Spring Security注解方式权限控制过程

《SpringSecurity注解方式权限控制过程》:本文主要介绍SpringSecurity注解方式权限控制过程,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、摘要二、实现步骤2.1 在配置类中添加权限注解的支持2.2 创建Controller类2.3 Us

Python中如何控制小数点精度与对齐方式

《Python中如何控制小数点精度与对齐方式》在Python编程中,数据输出格式化是一个常见的需求,尤其是在涉及到小数点精度和对齐方式时,下面小编就来为大家介绍一下如何在Python中实现这些功能吧... 目录一、控制小数点精度1. 使用 round() 函数2. 使用字符串格式化二、控制对齐方式1. 使用

Springboot控制反转与Bean对象的方法

《Springboot控制反转与Bean对象的方法》文章介绍了SpringBoot中的控制反转(IoC)概念,描述了IoC容器如何管理Bean的生命周期和依赖关系,它详细讲解了Bean的注册过程,包括... 目录1 控制反转1.1 什么是控制反转1.2 SpringBoot中的控制反转2 Ioc容器对Bea

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操