Protopie进阶教程--动态时钟(下)

导读

计时器——用户可设定时间段,点击开始后时间倒数,直到结束。

本案例中用户可以设定24小时以内的任意时间值进行倒计时,开始计时后界面显示剩余时间,同时圆环显示剩余时间比例,支持开始、暂停、继续、取消操作。

本篇教程涉及的protopie功能

○  触发:监听、单击、联动

○  反应:赋值、透明度、文本、停止、颜色、旋转、排序、重置

○  变量:数字变量及其计算表达


具体实现效果

计时器具体效果截图
具体实现的动态效果


制作思路

1.用户操作按钮的逻辑梳理

在计时器的三大流程(设置时间➡计时过程中➡时间到达提示)中,设置时间流程中,用户操作按钮显示“开始”和“取消”,其中取消按钮不可用。计时开始后,操作按钮变为“暂停”和可用的“取消”按钮,用户点击“暂停”按钮使计时暂停及继续,同时按钮文本也会随点击在“继续”和“暂停”中进行切换;用户点击“取消”,本次计时操作不再进行,回到计时开始前的设置时间页面。时间到达后,页面中其他按钮消失,显示“确定”按钮,点击确定使计时器回到初始状态。

2.滚动选择器的实现

滚动选择器是手机端常见的一种选择器,选择器会罗列所有的选项,用户可以通过滚动拨盘确认所需要的具体项。在实现的思路上,先利用protopie中滑页容器层实现按档位的滑动效果,而后可以通过联动触发将滑页值与具体选项的值关联起来。如果滑动过程中需要进行尺寸和透明度变化使其更接近真机效果,理论上也可以通过联动层进行设置。

3.计时过程中的剩余时间记录与显示

计时器的剩余时间与之前时钟和秒表的案例正好相反,属于倒数计算,而且具体剩余时分秒数值的显示需要涉及时间单位的换算。首先将滚动选择器选定的时分秒数值统一换算成总秒数,才可以通过每秒-1实现当前剩余时间计算。然后需要将这个剩余时间再转换为时、分、秒的显示,这里利用了Protopie的数学函数floor()的取整函数。举例来说,当剩余时间为12340秒时,其中小时数为floor(12340/3600) → 3小时,分钟数为floor((12340-3*3600)/60) → 25分钟,秒数12340-3*3600-25*60 → 40秒,可以表达为03:25:40。

floor()取整函数说明

4.剩余时间圆环比例的实现

在实现剩余时间的环状百分的实现上最大的难点在于Protopie中对图形描边的设置只有颜色、透明度、位置和宽度可以设置,想要实现最终效果上的环状百分比图的效果需要使用一些障眼法,对环状图进行切分后做旋转设置。

有两种思路:

a.将黑色圆环做切割后做旋转设置。具体切割方法见下图说明将圆环不断进行对半切割,实现效果就是将1号线段先进行角度旋转后,当其旋转180度后隐藏并开始旋转2号线段,旋转90度后隐藏开始旋转3号线段,以此类推。(我实现过程中发现这种方法图层很多,管理起来太复杂基本pass这个方案,有兴趣的可以自行尝试)

思路a 图示说明

b.将黑色圆环做对半切割,左右分别做旋转设置,同时在左侧增加与背景一致的遮挡图层,使得右半侧圆环可以旋转入内,具体图层关系如下。这样图层管理更便捷,下面的具体实现步骤中使用的就是这种方法。

思路b 图示说明


具体实现步骤

step1

新建Protopie文件,实现滚动选择器及按钮的基本视效。

滚动选择器的基本视效及图层关系

○  建立秒选择、分钟选择、小时选择三个滑页容器层,高度可以显示7个文本高度,将0-59、0-59、0-23的多层文本层分别放置其中。并将滑页设置如下,自定义高度为文本高度,案例中为40 。由于第一个文本和最后一个文本都需要滑动到中间的位置,所以还需要在文本前后,加上段前和段后的与背景色一致的矩形,高度为3个文本高度。

滑页方式自定义设置

Step2

实现滚动选择器的滚动渐变效果,并建立三个变量分别命名为hourminsec使变量与滚动选择器选择的小时、分钟、秒数关联起来。

○  在滚动选择器滚动过程中的渐变效果有两种实现方式:

方式一:通过联动滑页容器的滚页值与单个具体文本的透明度进行联动设置,具体设置如下,但是这个方法需要对滑页容器中每个文本进行单独设置,较为繁琐,不建议使用。

方式一的联动设置

方式二:可以直接在滚页容器层上添加背景色渐变的蒙版,模拟渐变效果。

方式二的渐变蒙版效果

○  利用联动将变量hourminsec与滚动选择器选择的小时、分钟、秒数关联起来。由于我们自定义了每次滑页值,所以可以直接使用单条联动范围设定,对应可以直接得到整数值。实现这一步后可以开启变量显示,预览一下具体效果。

联动触发下的赋值设置

Step3

新建变量allnow,对应用户设定计时的总时长和当前剩余时长。使用户点击“开始”后支持计时倒数,而开始后也支持计时的暂停、继续及取消。

○  当用户设定的时间为0时点击“开始”不起效,为了进行操作判断,变量all的即用户设定的总时长最好是可以在用户滚动时可以直接进行赋值计算,所以首先对变量hourminsec添加监听,每次变化都对变量all进行一次赋值,表达式:(hour*3600)+(min*60)+sec

赋值表达式设置

○  对开始的文本添加单击触发,当文本为“开始”且变量all≠0时,对变量now进行两次赋值,首先使其等于变量all的值,而后使其0.01秒减少0.01,延迟0.01进行,这边使用0.01的时间精度使得暂停和继续不用做复杂单秒内的时间判断。

对变量now的两次赋值设置

○  当文本为“暂停”时停止变量now的倒数计时;当文本为“继续”时重新进行每0.01秒减少0.01,延迟0.01进行的设置。

○  最后对这几种状况的文本内容、文本颜色、文本透明度进行设定将操作连贯起来。

对“开始”文本的单击触发设置

Step4

将设定时间的滚动选择器隐藏,并剩余时间的数字表达和环形百分比资源导入,以实现倒计时过程中的基本视效。

倒计时过程中的基本视效及图层关系

○  数字表达中需要拆分时分秒,使用不同的文本图层

○  环形百分比主要分为三部分:①运动点&固定点,实现描边的圆角效果;②右半圆环分为底部黑色圆环和上部白色半透遮挡层(旋转180°、默认透明度0%);③左半圆环分为底部黑色圆环和上部白色半透遮挡层(旋转180°、默认透明度90%)。由于图层关系,默认效果显示为一个黑色正圆。

Step5

新建变量ceilnowlasthlastmlasts,计算具体的剩余时间,将计算时间换算并显示为具体文本,实现计时过程中数字计时部分。

○  由于变量now之前设置中计算精度为0.01秒,所以计算剩余时间时先要进行一次去小数点后整数进一的设置,利用 ceil() 表达式,并复制给变量ceilnow

ceil()取整表达式说明

○  结合前文对时间换算的思考,增加对变量now的监听触发,对变量ceilnowlasthlastmlasts,分别进行赋值设置。

        变量ceilnow=ceil(now)

        变量lasth=floor((ceilnow/3600))

        变量lastm=floor((ceilnow-3600*lasth)/60)

        变量lasts=ceilnow-3600*lasth-60*lastm

○  对变量lasthlastmlasts添加监听,对时分秒的文本内容进行设置,使其在显示上永远显示00:00:00的六位格式。

监听触发下的文本设置

Step6

实现倒计时过程中,环形剩余时间百分比的显示。

○  首先是圆环边缘圆角的小圆点的旋转设置,在对变量now的监听触发下增加运动点的旋转设置。使其旋转角度与剩余时间与设定时间的比例相关,旋转至使用表达式 (now/all)*360

○  然后是左右半圆的旋转设置,案例中主要是对白色半透遮挡层进行旋转设置。左右半边的旋转看为两个阶段,使用条件判断后进行设置。A.当变量now>all/2时,增加排序的设置,将左侧半圆及其遮挡层放置于右侧半圆及遮挡层之后,右侧半圆遮挡透明度设为0%,再添加左侧遮挡的旋转表达式,案例中使用的是 (now/all)*360-180 ,实际的话需要结合各自使用的切图资源。B.变量now<all/2且≥0时,增加排序使得右侧半圆及其遮挡层放置于左侧之后,将右侧半圆遮挡透明度设为90%,使其显示并添加与右侧一致的旋转表达式。

○  设置完成后测试了一下,对几个节点值再增加旋转设置以保证效果:①当变量now=变量all时,即用户开始计时的时候将左右半圆的上层遮挡均设为不被遮挡。②当变量now=all/2 时,再做一次左右遮挡的旋转设置,使其显示为左侧完全遮挡、右侧完全显示。③变量now=0且开始文本内容为“暂停”时,停止变量now,并且将右侧的遮挡半圆完全遮挡右侧半圈。

监听变量now的所有反应设置

Step7

增加“时间到!”文本和“确定”按钮,当到达计时时间时显示出来。确认按钮支持点击操作,实现完整的操作逻辑。

○  增加“时间到!”和“确定”两个文本图层,监听变量now当其=0且开始文本内容为“暂停”时,添加透明度的设置,使其显示为下面右图所示效果。

时间到时所有反应设置及视效效果

○  对本文“确定”添加点击触发,添加一个重置,使其点击后使场景重置,恢复到最初效果。

“确定”文本单击触发下的重置设置

Step8

最后整体整理一下所有图层透明度关系,使页面所有元素在不同的计时阶段中下进行正常的显示及隐藏。

大功告成!!!可以直接在预览窗中查看效果~~

案例源文件下载&预览

https://cloud.protopie.io/p/ada86850ea

(源文件中有三个不同场景,对应“时钟”、“秒表”、“计时器”)


本篇教程作者:Annie;编辑 :JJ 


相关教程:Protopie进阶教程--动态时钟(上)

相关教程:Protopie进阶教程--动态时钟(中)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,911评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 82,014评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 142,129评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,283评论 1 264
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,159评论 4 357
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,161评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,565评论 3 382
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,251评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,531评论 1 292
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,619评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,383评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,255评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,624评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,916评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,199评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,553评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,756评论 2 335

推荐阅读更多精彩内容