资讯专栏INFORMATION COLUMN

即刻APP收藏按钮的实现

ernest.wang / 412人阅读

摘要:前不久即刻更新到了,整体虽然朴实了不少,但也不乏一些精致的效果,比如收藏按钮,效果如下,代码已上传实现这个效果需要三个元素最下层利用创造一个爱心形状的中间层添加一个镂空的用于显示爱心边框最上层需要一个用于显示填充动画的这里就不过多介绍了,如

前不久即刻更新到了2.0,整体 UI 虽然朴实了不少,但也不乏一些精致的效果,比如收藏按钮,效果如下,代码已上传github

实现这个效果需要三个元素

最下层利用 maskLayer 创造一个爱心形状的 View

中间层添加一个镂空的 ImageView 用于显示爱心边框

最上层需要一个用于显示填充动画的View

maskLayer 这里就不过多介绍了,如果用代码创建一个爱心形状的 maskLayer 也未免太麻烦,
虽然有paintcode这样的工具存在,所以直接用图片创建 maskLayer 是最佳方案:

- (void)setMaskImage:(UIImage *)maskImage{
    _maskImage = maskImage;
    if (!_maskLayer) {
        self.maskLayer = [CALayer layer];
        self.maskLayer.frame = CGRectMake(0,0, _maskImage.size.width, _maskImage.size.height);
        self.layer.mask = _maskLayer;// 必须设置frame
    }
    self.maskLayer.contents = (id)[_maskImage CGImage];
}

这里也验证下即刻是用图片创建 maskLayer 的事实,从 ipa 包中提取 Assets.car 文件,实际上这个文件就是Images.xcassets
但是 Mac 上不能直接打开,所以就需要用到ThemeEngine工具,浏览里面的内容就可以找到:

很显然第一张图片就是用于创建 maskLayer,另一张就是用于第二个元素的创建,只需要简单的添加一个 Iamgeview

- (void)setBorderImage:(UIImage *)borderImage{
    _borderImage = borderImage;
    if (!_borderImageView) {
        self.borderImageView = [[UIImageView alloc] init];
        self.borderImageView.frame = CGRectMake(0,0, _borderImage.size.width, _borderImage.size.height);
        [self addSubview:_borderImageView];
    }
    self.borderImageView.image = _borderImage;
    [self sendSubviewToBack:_borderImageView];
}

最后,利用 setFillColor 方法创建 fillView,设置 transform 来配合之后的动画

- (void)setFillColor:(UIColor *)fillColor{
    _fillColor = fillColor;
    if (!_fillView) {
        self.fillView = [[UIView alloc] initWithFrame:self.bounds];
        self.fillView.layer.cornerRadius = self.bounds.size.width * 0.5f;
        self.fillView.transform = CGAffineTransformMakeScale(0, 0);
        [self addSubview:_fillView];
    }
    self.fillView.backgroundColor = _fillColor;
}

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/15859.html

相关文章

  • 知识大杂烩系列- 收藏集 - 掘金

    摘要:通过实现动态封禁后端掘金一背景为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的黑名单。目录模块化配置掘金本文以和为例讲解下如何模块化配置,以及一键打补丁包的实现方法。 Nginx 通过 Lua + Redis 实现动态封禁 IP - 后端 - 掘金一、背景 为了封禁某些爬虫或者恶意用户对服务器的请求,我们需要建立一个动态的 IP 黑名单。对于黑名单之内的 IP ,拒绝...

    DandJ 评论0 收藏0
  • 自定义控件及效果

    摘要:实现炫酷的登录效果美观,动画效果丰富风格底部选择器支持时间,日期,自定义带来一组风格底部选择器控件,虽然我们不提倡安卓使用风格的控件,但是难免有些产品和美工一味追求风格。 Android 动画效果定值范围选择控件 实现固定值的范围选择, 并添加动态效果, 使用方便 项目需求讨论 - Android 自定义 Dialog 实现步骤及封装 根据实际项目需求出发。因为项目中的对话框要配合整个...

    刘德刚 评论0 收藏0
  • 动画 ui - 收藏集 - 掘金

    摘要:知乎和简书的夜间模式实现套路掘金,大家好,我是。记得上一篇讲打造浪漫的表白程序掘金几年前,看到过有个牛人用绘制了浪漫的爱心表白动画。浪起来的下拉刷新掘金本文章介绍的组件为参考大名鼎鼎的开源的一个下拉刷新逻辑实现,形式均为个人原创。 这交互炸了:饿了么是怎么让Image变成详情页的 - 掘金晚上叫外卖,打开饿了么,发现推了一个版本,更新以后,点开了个鸡腿,哇,交互炫炸了。 本文同步自wi...

    Labradors 评论0 收藏0
  • 动画 - 收藏集 - 掘金

    摘要:本文分析主要把文件转为动画属性动画入门实践掘金前言说道动画肯定要先介绍一下,逐帧动画和补间动画。安卓动画详解一官方文档掘金概览安卓为元素和自己绘制图形提供了一系列的,这篇文章介绍了这些的主要用法。 那些年收藏的 Android 开源库集合 (UI 效果) - Android - 掘金文章内容定期更新该专题其他文章:那些年收藏的Android开源库集合(控件)那些年收藏的Android开...

    roadtogeek 评论0 收藏0
  • Flask_Web学习梳理总结(下)

    摘要:简单回顾与使用大型组织结构的区别,狗书中从第八章的实例后都采用了蓝本的方式处理路由。故无法显示表单或者文章列表。表示与收藏关系的关联表,使用模型表示。最后放几张总结的脑图和自己基于狗书上的修改轻博客。地址狗书上总结的脑图 简单回顾hello.py与使用大型组织结构的区别,狗书中从第八章的实例后都采用了蓝本的方式处理路由。 import #导入 ...

    RyanHoo 评论0 收藏0

发表评论

0条评论

ernest.wang

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<