Loading [MathJax]/jax/input/TeX/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >动画效果:snapshotViewAfterScreenUpdates的使用

动画效果:snapshotViewAfterScreenUpdates的使用

作者头像
莫空9081
发布于 2021-03-01 03:47:45
发布于 2021-03-01 03:47:45
1.6K00
代码可运行
举报
文章被收录于专栏:iOS 备忘录iOS 备忘录
运行总次数:0
代码可运行

动画

动画: 复杂动画的实现:首先要拆分,明确你自己要实现的效果是什么,然后开始拆分,第一步实现什么,然后实现什么…,怎么样链接起来。把复杂的动画拆分成一个个小步骤,然后一步步实现就可以了。

snapshotViewAfterScreenUpdates(_:) 这个方法我在做拖拽tableView的item的时候(eg: SystemPreference)看到的,感觉用来做动画很好用。相当于截个图,然后拿着这个截图,实现各种动画效果。 eg:

  1. 如果你是一个电商项目,将商品加入购物车,这个动画就可以用这个来实现(Ps:我记得京东还是淘宝久有这个效果,但是我却又找不到了),点击加入购物车,然后对商品生成一个快照,然后缩小移动到购物车(还可以加入旋转的动画),到购物车的位置,移除。Perfect!
  2. 我做的这个项目,读信的过程就是用这个效果实现,点击信封,然后生成快照,然后快照位移到屏幕中间,消失,然后信封详情出现。

实现

首先,定义动画效果的实现:

  1. 查看信件:a. 点击信件,然后生成信件快照; b.信件快照位移到屏幕中央;同时信件详情出现,信件快照消失;
  2. 关闭详情:a. 点击空白处,生成信件详情快照和信件快照;信件快照起始状态隐藏;b.信件详情快照慢慢变小到和信件快照同样大小;然后消失,信件快照显示;c:信件快照位移到信件的位置,然后消失;

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 *  @brief 返回对应view的snapshot
 *
 *  @param inputView 输入的view
 *
 *  @return 返回的snapshot
 */
- (UIView *)customSnapshotFromView:(UIView *)inputView {
    UIView *snapshot = [inputView snapshotViewAfterScreenUpdates:YES];
    snapshot.layer.masksToBounds = YES;
    snapshot.layer.cornerRadius = 0.0;
    snapshot.layer.shadowOffset = CGSizeMake(-5.0, 0.0);
    snapshot.layer.shadowRadius = 5.0;
    snapshot.layer.shadowOpacity = 0.4;
    return snapshot;
}```

> 关闭详情

```Objective-C

/**
 *  动画 关闭详情
 *
 *  @param sourceView      起始位置的view
 *  @param destinationView 终点位置的view
 *  @param animateFinished 动画结束的回调
 */
- (void)animateView:(UIView *)sourceView
             toView:(UIView *)destinationView
           finished:(AnimateFinished)animatedFinished
{
    /**
     *  逻辑:1. 得到两个view的snapshot, sourcesnapshot/destinationsnapshot
     *       2. 然后,设置destinationsnapshot的中心为整个view的中心,设置为透明(即不显示)
     *       3. 隐藏当前sourceView,第一个动画实现,sourceViewsnapshot大小变为destinationsnapshot的大小,然后隐藏,同时显示destinationsnapshot
     *       4. 第二个动画实现:destinationsnapshot移动回对应位置,然后隐藏
     */
    
    // 1
    UIView *sourceSnapshot = [self customSnapshotFromView:sourceView];
    UIView *destinationSnapshot = [self customSnapshotFromView:destinationView];
    
    // 2
    CGPoint viewCenter = self.view.center;
    CGPoint destinationCenter = destinationView.center;
    destinationSnapshot.center = viewCenter;
    destinationSnapshot.alpha = 1.0;
    [self.view addSubview:sourceSnapshot];
    [self.view addSubview:destinationSnapshot];
    
    // 3
    sourceView.hidden = YES;
    [UIView animateWithDuration:0.5
                     animations:^{
                         sourceSnapshot.transform = CGAffineTransformMakeScale(1.05, 1.05);
                         sourceSnapshot.alpha = 0.98;
                         sourceSnapshot.frame = destinationSnapshot.frame;
                     } completion:^(BOOL finished) {
                         
                         self.alphaView.hidden = YES;
                         destinationSnapshot.alpha = 0.98;
                         [sourceSnapshot removeFromSuperview];
                         
                         // 4
                         [UIView animateWithDuration:0.5
                                          animations:^{
                                              destinationSnapshot.center = destinationCenter;
                                              destinationSnapshot.transform = CGAffineTransformIdentity;
                                          } completion:^(BOOL finished) {
                                              [destinationSnapshot removeFromSuperview];
                                              animatedFinished();
                                          }];
                     }];
    
}```

> 查看详情

```Objective-C

/**
 *  动画 查看详情
 *
 *  @param viewToshow      要展示的view
 *  @param currentView     起始的view
 *  @param animateFinished 动画结束的回调
 */
- (void)showView:(UIView *)viewToshow
        withView:(UIView *)currentView
        finished:(Finished)animateFinished
{
    // Taking a snapshot of the selected row using helper method
    UIView *snapShot = [self customSnapshotFromView:currentView];
    
    // Add the snapshot as a subview, centered cell's center
    CGPoint viewCenter = self.view.window.center;
    CGPoint cellCenter = currentView.center;
    snapShot.center = cellCenter;
    snapShot.alpha = 0.0;
    snapShot.backgroundColor = [UIColor whiteColor];
    
    [self.view addSubview:snapShot];
    [UIView animateWithDuration:0.5 animations:^{
        snapShot.transform = CGAffineTransformMakeScale(1.05, 1.05);
        snapShot.alpha = 0.98;
    } completion:^(BOOL finished) {
        [UIView animateWithDuration:0.5 animations:^{
            snapShot.center = viewCenter;
            snapShot.transform = CGAffineTransformIdentity;
        } completion:^(BOOL finished) {
            self.alphaView.hidden = NO;
            viewToshow.hidden = NO;
            [snapShot removeFromSuperview];
            animateFinished();
        }];
    }];
}```

> Ps: 也许会好奇,为什么查看和关闭会是两个不同的部分?可以再回头查看一下分割的动画,发现过程其实是不一样的,查看详情比关闭少了一个步骤。
代码:[AnimateSnapshotView](https://github.com/mokong/AnimateSnapShotView)
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016-01-282,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo
每一个UIView内部都默认关联着一个CALayer, UIView有frame、bounds和center三个属性,CALayer也有类似的属性,分别为frame、bounds、position、anchorPoint。
公众号iOS逆向
2022/08/22
2.1K0
iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo
简单放置一张图片,实现放大缩小旋转效果1 image和imageView的区别2 创建控件显示到view上的标准步骤3 CGRectOffset函数的含义4 小飞机-监听四个按钮的点击事件(代码)5
1 image和imageView的区别 image是图片(照片). imageView是放图片的控件(相框). 2 创建控件显示到view上的标准步骤 创建对象. 设置内容. 设置大小. addsubview 3 CGRectOffset函数的含义 待补充 4 小飞机-监听四个按钮的点击事件(代码) -(void)addTarget:(nullable id)target action:(SEL)action forControlEvents:(UIControlEvents)controlEvents;
stanbai
2018/06/28
1.1K0
类似3D效果_CGAffineTransformScale
1️⃣CGAffineTransformMakeTranslation (相对平移)假设是一个视图,那么它的起始位置 x 会加上tx , y 会加上 ty 2️⃣CGAffineTransform
Dwyane
2018/05/22
1.2K0
iOS 系统中的视图动画
动画为用户界面的状态转换提供了流畅的可视化效果, 在 iOS 中大量使用了动画效果, 包括改变视图位置、 大小、 从可视化树中删除视图, 隐藏视图等。 你可以考虑用动画效果给用户提供反馈或者用来实现有趣的特效。
beginor
2020/08/10
2.4K0
iOS利用锚点实现定点缩放弹窗
demo下载地址:https://download.csdn.net/download/u011018979/16092830
公众号iOS逆向
2021/07/29
1.7K0
实践-小效果 V
关键效果设置:在改变tableHeaderView的高度后,再手动调用下 Tb 的 setTableHeaderView方法。
進无尽
2018/09/12
1.1K0
实践-小效果 V
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
前段时间闲着无聊和盆友就搞了个图床站Chevereto-Free,忽然发现居然有API提供,而且很简单,只需要一个KEY就可以
gwk_iOS
2018/08/23
1K0
iOS开发-RAC+MVVM练手项目 图床App写在前面准备工作界面设计首页历史关于后记
iOS点击TableView的cell显示弹出动画
最近使用豌豆荚一览的app时看到它的点击cell后弹出界面的动画很帅,所以自己琢磨着实现了一个,效果如下:
Cloudox
2022/05/13
1.6K0
iOS点击TableView的cell显示弹出动画
demo1 动态显示view或弹框 动态隐藏view或弹框
实现界面如上所示: 有一个弹框,弹框上边有一个关闭按钮,点击按钮,可以关闭弹框。点击弹框的周围区域也可以关闭按钮。 点击上边的隐藏弹框也可以关闭按钮。 在实现功能的基础上,以动画的形式展示跟隐藏。 思路:在之前的开发中,我的思路比较局限。想着用一个view来做中间的那一块,那么问题来了,左上角的关闭按钮,就加在view的左上角。效果猛一看是可以实现,但是这个关闭按钮的点击事件,却不怎么好使,因为按钮有一部分超出了view的界限,于是,点击起来就不太好使。 遇见问题,解决问题。于是我就转换了一种思路
用户1219438
2018/02/01
1.1K0
demo1 动态显示view或弹框 动态隐藏view或弹框
实践-小效果 II
UIApplication *app = [UIApplication sharedApplication]; // 应用程序右上角数字 app.applicationIconBadgeNumber = 99;
進无尽
2018/09/12
1.2K0
实践-小效果 II
实践-小效果 Ⅳ
设置一个UIImageView为倒立的同等控件,设置这个UIImageView的layer的mask为一个渐变图层,效果就出来了。
進无尽
2018/09/12
6940
实践-小效果 Ⅳ
iOS 连续动画效果(让APP动起来)
开篇 近期工作不忙,来一个需求感觉棒棒的,是一个比较简单的页面,如下图(图1) 应该很简单吧,没什么大的功能,就是一个展示,一个拨打电话,拨打电话不需要说,几行代码搞定,基本UI也不用说了,刚培训完的
GuangdongQi
2018/05/24
2K0
iOS点击查看大图的动画效果
对于图片来说,除了表情包,几乎都会被点击查看大图。今天就讲解一个查看和收起大图的动画效果,先直接看效果图:
Cloudox
2021/11/23
1.8K0
iOS点击查看大图的动画效果
【iOS】今日头条的转场动画设置+手势控制
最近公司有个需求,做一个今日头条的用户动态的进入和退出的动画效果,并且退场时,可以自己点击退出,也可以手势下滑退出。头条的效果如下:
MapleYe
2020/03/31
1.9K0
【iOS】今日头条的转场动画设置+手势控制
自定义一个浮层弹窗视图
早在2017年年初,我就用七八篇文章的篇幅系统介绍过Objective-C中的CoreAnimation框架。CoreAnimation是iOS中实现动画的框架,整个iOS中的动画(比如UIView中封装的动画、UIViewController切换时的转场动画、UITableViewCell移除增添时的动画等,都是对CoreAnimation的封装)都是通过CoreAnimation实现的。
拉维
2019/08/12
1.5K0
自定义一个浮层弹窗视图
View编程指南(四)
动画在用户界面的不同状态之间提供流畅的视觉转换。 在iOS中,动画广泛用于重新定位view,更改大小,将其从view层次结构中移除,并将其隐藏起来。 您可以使用动画将反馈传达给用户或实现有趣的视觉效果。
Helloted
2022/06/07
6950
iOS 开发从 UIView 动画说起
毋庸置疑的:在iOS开发中,制作动画效果是最让开发者享受的环节之一。一个设计严谨、精细的动画效果能给用户耳目一新的效果,吸引他们的眼光 —— 这对于app而言是非常重要的。 本文作为动画文集的第一篇,最开始是想做个qq下拉刷新的水滴动画的制作讲解,但这几天研读《iOS Animations by Tutorials》一书,对iOS动画开发有了更为深刻的了解,于是决定动画篇将从UIView动画开始讲起,以后还会有Layer、Transitioning等在内的动画,希望本文能抛砖引玉,带给大家不一样的理解,下面
春哥大魔王
2018/04/17
1.8K0
iOS 开发从 UIView 动画说起
iOS 动画基础总结篇
美女镇楼.JPG 好久没有更新简书了,最近在看一个动画的第三方,想着是时候可以把动画相关的东西总结下了!对了,上面的美女是龙母!哈哈,最近看权力游戏,感觉很好! -------------------------------------------------进入正题------------------------------------------------------------------ 动画的大体分类(个人总结可能有误) 分类.png UIView 动画 属性动画 [UIView beg
陈雨尘
2018/06/07
1.1K0
UI动画效果
UI界面的动画效果总结 方式1:头尾式 //开始动画 [UIView beginAnimations:nil context:nil]; //设置动画时间 [UIView setAnimationDuration:2.0]; /* 需要执行动画的代码 */ //提交动画 [UIView commitAnimations]; 方式2:block式 [UIView animateWithDuration:2.0 delay:1.0 options:kNilOptions animations:^{
用户1941540
2018/05/11
1.9K0
直播APP常用动画效果
介绍 记录、总结开发遇到一些问题,大家一起交流学习。 这次带来,对直播APP的常用动画总结。 直播Live 效果展示 下面是一个很多平台都有的入门豪华礼物动画——烟花。 一个复杂的礼物动画,首先
落影
2018/04/27
1.8K0
直播APP常用动画效果
相关推荐
iOS动画小知识:定点缩放弹窗(利用锚点anchorPoint进行实现)包含完整demo
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档