【绘图案例-自定义进度条 Objective-C语言】

一、好,我们接着来说这个自定义进度条

通知

1.这个Slider啊,简单的这个value属性,介绍完了,以后,监听也可以监听的到了,接下来,我们来做这个自定义进度条啊,

那么,首先啊,我是这么想的,在这个slider的最小值、和、最大值、我给它改成0、到、1、

通知

因为如果这样的话,到时候,我画里边的那个圆的时候,我只需要让2倍的派,乘上这个数字,就可以了,因为在中间的时候,肯定是0.5,嘛

那我2倍的派,乘上0.5,也就整好是一半吗,

所以,我在这一块儿啊,直接写个0、到、1、

当然,你可以自己随便去写,你要写成0、到、100、也可以,

然后,这样的话,你中间那个Label,显示进度的时候,做起来也就方便了,都是一样的啊,你写多少都行,然后,这是一个啊,我在这儿,直接写成0到1了,我觉得这样最方便,

然后呢,接下来,我们在这个里边,去画圆,画弧,

2.首先,在我们的HMView里边,我们要画一个弧的话,

通知

UIBezierPath *path = [UIBezierPath bezierPathWithArcCenter:CGPointMake(150, 150) radius:100 startAngle:0 endAngle:2 * M_PI clockwise:1];

[path fill];

通知

// 填充

然后呢,我现在如果,到时候这个值,到时候,我拖动slider啊,我slider在哪儿,是在Controller里边的一个控件,我肯定是要通过Controller,拿到这个值啊,

通知

传给那个View,到时候,一定是要传给那个View的,然后呢,那个View,拿到的那个数字,应该是从0到1的取值范围,

通知

是我slider滑动的这个范围,从0到1,

所以呢,我在这个里边,可以先来试验一下,

就是说,你在自己写程序,也是一样啊,不一定就是一定就是一套写好,先去试一试,跟你想的效果一样了,再去往后做啊,

我在这个里边,直接乘上一个0.5,

通知

就是到时候可能啊,传过来的数,如果,是一个半圆,说明我这块儿,应该是没什么太大的问题,到时候,我直接把这个0.5改成传过来的数字,就可以了,好,command + R,看一下是不是一个半圆啊,

通知

好,确实是一个半圆,但是,这个里边呢,我觉得,好像跟我们示例程序不太一样,示例程序的起点,是从12点钟方向开始的,所以呢,如果我这里就算是乘以0.5的话,我应该把它从12点钟方向,画到6点钟方向,那么这个时候,我这块儿应该稍微改一改吧,好,起点应该改成什么,

0 - M_PI_2

通知

那,终点呢,直接在后边减去 M_PI_2吗,还是减完再乘,还是乘完再减,直接在后边减,是吧,

通知

看一下,

通知

好,这个里边儿啊,实际上,写程序,不要想的太复杂了,想起来什么,你觉得那样做对,你就去写一遍,跑一遍,对了就对了,不对了再去改,不要太去纠结于怎么着去计算,浪费脑细胞啊,实际上,这个里边啊,我们说,我在这块儿,故意写成了0 - M_PI_2,实际上,就是,你不减后边这个数字,你是从3点钟方向,到6点钟方向,你现在想让它位置,整体相当于偏移了90度一样,那你就在两边,都减去一个M_PI_2,

通知

就完了,没有那么复杂,不要去考虑什么,先减再乘,还是先乘再减

3.然后,接下来,我需要做的,就是把这个0.5改了,

通知

假如说,有一天,我传过来的是一个1,

通知

它应该是一个完整的圆,就对了,

通知

然后呢,假如说,我想改成多少,我可以先试一下,改成0.25,

通知

那就是一个这个样子的,

通知

这个样子的效果,发现不太对了,怎么办,这个是不是不是扇形,扇形应该怎么着,去做,对,去往圆心连线,

// 往圆心连线

[path addLineToPoint:CGPointMake(150, 150)];

通知

command + R,

通知

这个时候,就对了,你可以先去试验试验啊,

发现问题了,改问题,然后,再去往后做,接下来,我现在,应该是没啥问题了,

只要把0.25这个数字,

通知

变成传过来的数据,就可以了,

4.那么,所以呢,首先啊,我现在呢,在ViewController里边,我希望把这个,

通知

sender.value,传给这个HMView,那么,首先,我要有HMView的这个对象,所以呢,我应该storyboard,拖根儿线吧,我应该storyboard,把这个蓝色的View,拖到interface里吧,

通知

我应该把这个蓝色的View,拖到这个interface上吧,

通知

不能alloc,init,吧,

能alloc,init吗,不能吧,因为你要alloc,init,是一个新的对象了,对吧,这个里边啊,这个里边儿,实际上,之前,好像

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/573782.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

展示大屏-24小时天气预报

一、项目说明 展示大屏显示未来一周天气和24小时天气详情。 二、技术工具 1.语言&框架:java、springboot 2.UI界面:jQuery、HTML、CSS、 VUE 3.开发工具:IntelliJ IDEA、Eclipse 三、实现步骤 后端步骤 1.调取免费或收费的API接口。 …

2024最赚钱的副业!一月轻松上万!实操分享快来学习!

​​每个人都玩抖音吧,我相信大家的手机上必有的两个软件,除了微信,就是抖音 但微信只有上班或者亲戚朋友来信息时才会打开看,而抖音是我们蹲厕所都要打开刷一刷的东西 那找兼职或副业的人有没有想过在抖音上赚钱 抖音最赚钱的…

【前端学习——js篇】11.元素可见区域

具体见:https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop,元素的上外边框至包含元素的上内边框之间的像素距离,其他offset属性如下图所示: 下面再来了解下clientWidth、clientHeight…

Linux系统编程--信号

1、信号(一) 1.1、什么是中断 1.2、中断分类 1.3、信号 1.4、信号与中断 1.5、信号名称 1.6、进程对信号的三种响应 1.7、signal函数:注册信号 signal(SIGINT, handler);返回值是SIGINT所对应的处理程序 再调用一下signal(SIGINT, handler2…

前端实现浏览器自定义滚动条

前言: 最近有个项目,产品觉得浏览器默认滚动条太丑了。想美化一下,比如自定义颜色,加上圆角,宽高都要更改一下。我查了资料和文档总结了一下 写法,特此记录以便之后使用。 浏览器滚动条api 总结&#xff…

【计算机网络】启程

📝本文介绍 本文为计算机网路系列的开始篇,会介绍一下使用的书籍和自己做的思维导图。 👋作者简介:一个正在积极探索的本科生 📱联系方式:943641266(QQ) 🚪Github地址:https://githu…

「18」如何让你直播间增加高级质感,效果滤镜是你不二选择?

「18」效果滤镜给你的布景增加质感,更具视觉效果 首先,安装(模糊滤镜的‘streamfx’)安装包。安装成功后,StreamFX 会出现在 OBS 的菜单栏上。在OBS软件里滤镜可分为效果滤镜和音视频滤镜。 一、音视频滤镜 在选择「…

【技巧】PyTorch限制GPU显存的可使用上限

转载请注明出处:小锋学长生活大爆炸[xfxuezhang.cn] 从 PyTorch 1.4 版本开始,引入了一个新的功能 torch.cuda.set_per_process_memory_fraction(fraction, device),这个功能允许用户为特定的 GPU 设备设置进程可使用的显存上限比例。 测试代…

刚刚,百度和苹果宣布联名

百度 Apple 就在刚刚,财联社报道,百度将为苹果今年发布的 iPhone16、Mac 系统和 iOS18 提供 AI 功能。 苹果曾与阿里以及另外一家国产大模型公司进行过洽谈,最后确定由百度提供这项服务,苹果预计采取 API 接口的方式计费。 苹果将…

管理阿里云服务器ECS -- 网站选型和搭建

小云:我已经学会了如何登录云服务器ECS了,但是要如何搭建网站呢? 老王:目前有很多的个人网站系统软件,其中 WordPress 是使用非常广泛的一款,而且也可以把 WordPress 当作一个内容管理系统(CMS…

机器学习中的LightGBM模型及其优缺点(包含Python代码样例)

目录 一、简介 二、优缺点 三、样例代码 四、总结 一、简介 LightGBM(Light Gradient Boosting Machine)是一种基于梯度提升(Gradient Boosting)算法的机器学习模型。它是由微软团队于2017年开发的,旨在解决大规模…

Spring 事务传播行为

实现原理 : Aop (TransactionInterceptor) 实现 使用spring声明式事务注意事项 同一个bean中的方法调用必须重新声明一个bean调用、否则后续方法调用的事务默认使用第一个第二个不生效 package com.cloud.person.service.impl;import com.cloud.person.dao.S1Mapper; import…