iOS使用[核心动画]和[定时器]两种方式实现【呼吸灯动画】(仿蘑菇街价格标签)...

本文主要是介绍iOS使用[核心动画]和[定时器]两种方式实现【呼吸灯动画】(仿蘑菇街价格标签)...,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

最近公司需求做个类似小红书的标签呼吸灯动画,经过一段时间研究使用两种方式实现了该效果…

呼吸灯效果图

第一种方式使用定时器加 UIView动画,核心方法如下

 
  1. -(void)begigFlashAnimation {
  2. // 缩放 + 透明度动画
  3. self.flashView.transform = CGAffineTransformMakeScale(0.1, 0.1);
  4. [UIView animateWithDuration:3 animations:^{
  5. self.flashView.transform = CGAffineTransformMakeScale(1,1);
  6. self.flashView.alpha = 1.0;
  7. [UIView beginAnimations:@"flash" context:nil];
  8. [UIView setAnimationDuration:2];
  9. [UIView setAnimationCurve:UIViewAnimationCurveLinear];
  10. self.flashView.alpha = 0;
  11. [UIView commitAnimations];
  12. }];
  13. }

第二种方式使用核心动画的动画组,核心方法如下

 
  1. - (CAAnimationGroup *)groups {
  2. if (!_groups) {
  3. // 缩放动画
  4. CABasicAnimation * scaleAnim = [CABasicAnimation animation];
  5. scaleAnim.keyPath = @"transform.scale";
  6. scaleAnim.fromValue = @0.1;
  7. scaleAnim.toValue = @1;
  8. scaleAnim.duration = 2;
  9. // 透明度动画
  10. CABasicAnimation *opacityAnim=[CABasicAnimation animationWithKeyPath:@"opacity"];
  11. opacityAnim.fromValue= @1;
  12. opacityAnim.toValue= @0.1;
  13. opacityAnim.duration= 2;
  14. // 创建动画组
  15. _groups =[CAAnimationGroup animation];
  16. _groups.animations = @[scaleAnim,opacityAnim];
  17. _groups.removedOnCompletion = NO;
  18. _groups.fillMode = kCAFillModeForwards;
  19. _groups.duration = 2;
  20. _groups.repeatCount = FLT_MAX;
  21. }
  22. return _groups;
  23. }

对比两种方法,第一种方法需要使用定时器,第二个则不需要,不知道这样是否第二个性能性对来说会好点呢?

DEMO:https://github.com/Caiflower/XXTwinkleView

原文地址:http://bbs.520it.com/forum.php?mod=viewthread&tid=2492

 

之前写了篇关于呼吸灯动画的,有几个朋友问我应用场景,刚好最近有用到,借此来实际应用下,先看看效果图;

看了上面图片相信能想到一些实际的应用场景了吧
这里我已经将此控件简单封装了下,

你可以这么用

 
  1. // 创建 并设置标题,显示位置
  2. self.markView = [XXMarkTwinkleView markViewWithTitle:@"韩式波波头" showInRight: YES];
  3. // 宽度不用传,内部自适应了,如果对字体没有太大要求,高度其实也可以在内部固定
  4. self.markView.frame = CGRectMake(230, 320, 0, 30);
  5. // 设置文字颜色
  6. self.markView.textColor = [UIColor redColor];
  7. [self.view addSubview:self.markView];

也可以这么用

 
  1. // 快读创建一个呼吸灯view
  2. XXTwinkleView *twinkleView = [[XXTwinkleView alloc]initWithColor:[UIColor redColor] edgeColor:[UIColor whiteColor] circleWidth:8 edgeWidth:2];
  3. // 根据呼吸灯view创建 标签
  4. XXMarkTwinkleView *markView1 = [[XXMarkTwinkleView alloc]initWithTwinkleView:self.twinkleView showInRight:NO];
  5. // 设置标题
  6. markView1.title = @"波波头";
  7. // 宽度自适应不需要传宽度
  8. markView1.frame = CGRectMake(120, 360, 0, 30);
  9. [self.view addSubview:markView1];

并没有啥难点就做了个自适应宽度,只需要设置呼吸灯控件的位置,内部会根据标签显示在左边还是右边,后台返回呼吸灯控件的位置,我们根据呼吸灯的位置来创建标签,所以外面设置frame中的x,y应该是呼吸灯控件的中心点,所以这里需要注意的是,如何在内部修改控件的位置,具体方法如下

 
  1. - (void)layoutSubviews {
  2. [super layoutSubviews];
  3. // 下移一半
  4. CGRect tmpBounds = self.bounds;
  5. tmpBounds.origin.y -= self.cf_height * 0.5;
  6. self.bounds = tmpBounds;
  7. // 根据标签显示的位置,布局子控件
  8. if (self.isShowInRight) {
  9. self.twinkleView.frame = CGRectMake(-kTwinkleWidth * 0.5, -kTwinkleWidth * 0.5 , kTwinkleWidth, kTwinkleWidth);
  10. self.tagLable.frame = CGRectMake(self.twinkleView.cf_maxX + kContentMargin, -self.cf_height * 0.5 , self.tagLable.cf_width + kLabelAdditionalWidth, self.cf_height);
  11. // 设置宽度
  12. self.cf_width = self.tagLable.cf_maxX;
  13. }else {
  14.  
  15. self.tagLable.frame = CGRectMake(0, -self.cf_height * 0.5 , self.tagLable.cf_width + kLabelAdditionalWidth, self.cf_height);
  16. self.twinkleView.frame = CGRectMake(self.tagLable.cf_maxX + kContentMargin, -kTwinkleWidth * 0.5 , kTwinkleWidth, kTwinkleWidth);
  17. // 计算宽度
  18. CGFloat width = self.twinkleView.cf_minX + kTwinkleWidth * 0.5;
  19. // 修改x值
  20. self.cf_x = self.cf_x - width;
  21. // 设置宽度
  22. self.cf_width = width ;
  23. }
  24. // 设置圆角半径
  25. self.tagLable.layer.cornerRadius = self.cf_height * 0.5;
  26. }

具体效果请看 https://github.com/Caiflower/XXTwinkleView

 

原文地址: http://bbs.520it.com/forum.php?mod=viewthread&tid=2516

转载于:https://my.oschina.net/u/2345393/blog/758307

这篇关于iOS使用[核心动画]和[定时器]两种方式实现【呼吸灯动画】(仿蘑菇街价格标签)...的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

使用SecondaryNameNode恢复NameNode的数据

1)需求: NameNode进程挂了并且存储的数据也丢失了,如何恢复NameNode 此种方式恢复的数据可能存在小部分数据的丢失。 2)故障模拟 (1)kill -9 NameNode进程 [lytfly@hadoop102 current]$ kill -9 19886 (2)删除NameNode存储的数据(/opt/module/hadoop-3.1.4/data/tmp/dfs/na

Hadoop数据压缩使用介绍

一、压缩原则 (1)运算密集型的Job,少用压缩 (2)IO密集型的Job,多用压缩 二、压缩算法比较 三、压缩位置选择 四、压缩参数配置 1)为了支持多种压缩/解压缩算法,Hadoop引入了编码/解码器 2)要在Hadoop中启用压缩,可以配置如下参数

【前端学习】AntV G6-08 深入图形与图形分组、自定义节点、节点动画(下)

【课程链接】 AntV G6:深入图形与图形分组、自定义节点、节点动画(下)_哔哩哔哩_bilibili 本章十吾老师讲解了一个复杂的自定义节点中,应该怎样去计算和绘制图形,如何给一个图形制作不间断的动画,以及在鼠标事件之后产生动画。(有点难,需要好好理解) <!DOCTYPE html><html><head><meta charset="UTF-8"><title>06

Makefile简明使用教程

文章目录 规则makefile文件的基本语法:加在命令前的特殊符号:.PHONY伪目标: Makefilev1 直观写法v2 加上中间过程v3 伪目标v4 变量 make 选项-f-n-C Make 是一种流行的构建工具,常用于将源代码转换成可执行文件或者其他形式的输出文件(如库文件、文档等)。Make 可以自动化地执行编译、链接等一系列操作。 规则 makefile文件

hdu1043(八数码问题,广搜 + hash(实现状态压缩) )

利用康拓展开将一个排列映射成一个自然数,然后就变成了普通的广搜题。 #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#include<stdlib.h>#include<ctype.h>#inclu

使用opencv优化图片(画面变清晰)

文章目录 需求影响照片清晰度的因素 实现降噪测试代码 锐化空间锐化Unsharp Masking频率域锐化对比测试 对比度增强常用算法对比测试 需求 对图像进行优化,使其看起来更清晰,同时保持尺寸不变,通常涉及到图像处理技术如锐化、降噪、对比度增强等 影响照片清晰度的因素 影响照片清晰度的因素有很多,主要可以从以下几个方面来分析 1. 拍摄设备 相机传感器:相机传

Andrej Karpathy最新采访:认知核心模型10亿参数就够了,AI会打破教育不公的僵局

夕小瑶科技说 原创  作者 | 海野 AI圈子的红人,AI大神Andrej Karpathy,曾是OpenAI联合创始人之一,特斯拉AI总监。上一次的动态是官宣创办一家名为 Eureka Labs 的人工智能+教育公司 ,宣布将长期致力于AI原生教育。 近日,Andrej Karpathy接受了No Priors(投资博客)的采访,与硅谷知名投资人 Sara Guo 和 Elad G

【C++】_list常用方法解析及模拟实现

相信自己的力量,只要对自己始终保持信心,尽自己最大努力去完成任何事,就算事情最终结果是失败了,努力了也不留遗憾。💓💓💓 目录   ✨说在前面 🍋知识点一:什么是list? •🌰1.list的定义 •🌰2.list的基本特性 •🌰3.常用接口介绍 🍋知识点二:list常用接口 •🌰1.默认成员函数 🔥构造函数(⭐) 🔥析构函数 •🌰2.list对象

【Prometheus】PromQL向量匹配实现不同标签的向量数据进行运算

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开发,小程序开发,人工智能,js逆向,App逆向,网络系统安全,数据分析,Django,fastapi