仿简书、淘宝等等App的View弹出效果

昨天用简书App的时候觉得这个View的弹出效果特别好,而且非常平滑,所以我就尝试写了一个,和简书App上的效果基本一致了:

下面开始讲解:

1.首先我们要知道这个页面有几个View?这个页面其实有四个View,self.view , 图中白色VC的View rootVC.view ,白色VC上的maskView maskView , 以及弹出的popView popView 。我们创建它们:

self.view.backgroundColor = [UIColor blackColor];

_popView = ({

UIView * popView = [[UIView alloc]initWithFrame:CGRectMake(0, [UIScreen mainScreen].bounds.size.height, [UIScreen mainScreen].bounds.size.width, [UIScreen mainScreen].bounds.size.height /2.0)];

popView.backgroundColor = [UIColor grayColor];

//加个阴影

popView.layer.shadowColor = [UIColor blackColor].CGColor;

popView.layer.shadowOffset = CGSizeMake(0.5, 0.5);

popView.layer.shadowOpacity = 0.8;

popView.layer.shadowRadius = 5;

//关闭btn

UIButton * closeBtn = [UIButton buttonWithType:UIButtonTypeCustom];

closeBtn.frame = CGRectMake(15, 0, 50, 40);

[closeBtn setTitle:@"关闭" forState:UIControlStateNormal];

[closeBtn setTitleColor:[UIColor colorWithRed:217/255.0 green:110/255.0 blue:90/255.0 alpha:1] forState:UIControlStateNormal];

[closeBtn addTarget:self action:@selector(close) forControlEvents:UIControlEventTouchUpInside];

[popView addSubview:closeBtn];

popView;

});

//添加VC的View的方法

_rootVC.view.frame = self.view.bounds;

_rootVC.view.backgroundColor = [UIColor whiteColor];

_rootview = _rootVC.view;

[self addChildViewController:_rootVC];

[self.view addSubview:_rootview];

//rootVC上的maskView

_maskView = ({

UIView * maskView = [[UIView alloc]initWithFrame:self.view.bounds];

maskView.backgroundColor = [UIColor colorWithWhite:0 alpha:0.5];

maskView.alpha = 0;

maskView;

});

[_rootview addSubview:_maskView];

2.然后要添加点击事件,这里为了方便我的弹出事件直接用的touchesBegan

- (void)show

{

[[UIApplication sharedApplication].windows[0] addSubview:_popView];

CGRect frame = _popView.frame;

frame.origin.y = self.view.frame.size.height/2.0;

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

[_rootview.layer setTransform:[self firstTransform]];

} completion:^(BOOL finished) {

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

[_rootview.layer setTransform:[self secondTransform]];

//显示maskView

[_maskView setAlpha:0.5f];

//popView上升

_popView.frame = frame;

} completion:^(BOOL finished) {

}];

}];

}

这里要注意一下的就是popview是添加到window上面的:[[UIApplication sharedApplication].windows[0] addSubview:_popView];

然后关键的layer形变方法来了

- (CATransform3D)firstTransform{

CATransform3D t1 = CATransform3DIdentity;

t1.m34 = 1.0/-900;

//带点缩小的效果

t1 = CATransform3DScale(t1, 0.95, 0.95, 1);

//绕x轴旋转

t1 = CATransform3DRotate(t1, 15.0 * M_PI/180.0, 1, 0, 0);

return t1;

}

- (CATransform3D)secondTransform{

CATransform3D t2 = CATransform3DIdentity;

t2.m34 = [self firstTransform].m34;

//向上移

t2 = CATransform3DTranslate(t2, 0, self.view.frame.size.height * (-0.08), 0);

//第二次缩小

t2 = CATransform3DScale(t2, 0.8, 0.8, 1);

return t2;

}

大家可以看到这,应该可以发现这里其实有两次形变

3.隐藏动画

- (void)close

{

_isShow = NO;

CGRect frame = _popView.frame;

frame.origin.y += self.view.frame.size.height/2.0;

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

//maskView隐藏

[_maskView setAlpha:0.f];

//popView下降

_popView.frame = frame;

//同时进行 感觉更丝滑

[_rootview.layer setTransform:[self firstTransform]];

} completion:^(BOOL finished) {

[UIView animateWithDuration:0.3 delay:0 options:UIViewAnimationOptionCurveEaseInOut animations:^{

//变为初始值

[_rootview.layer setTransform:CATransform3DIdentity];

} completion:^(BOOL finished) {

//移除

[_popView removeFromSuperview];

}];

}];

}

最后,完整代码,已经封装好了,继承之后使用创建方法就行了

GitHub:Wzxhaha

https://github.com/Wzxhaha/WZXJianShuPopDemo

时间: 2024-08-13 04:09:49

仿简书、淘宝等等App的View弹出效果的相关文章

JS仿淘宝详情页菜单条智能定位效果

类似于淘宝详情页菜单条智能定位 对于每个人来说并不陌生!如下截图所示:红色框的那部分! 基本原理: 是用JS侦听滚动事件,当页面的滚动距离(页面滚动的高度)大于或者等于 "对象"(要滚动的对象)距离页面顶部的高度,也就是说滚动的对象与窗口的上边缘接触时,立即将对象定位属性position值改成fixed(固定) (除IE6以外,因为IE6不支持fixed).对于IE6用绝对定位position:absolute,top:就是"游览器滚动的top".在 IE6下浏览看

淘宝直播APP引导拉新奖励你怎么看

在2019年春节前几天,淘宝直播APP在外面成为淘宝独立直播体系的平台上线,最近一段时间,淘宝小二想尽方法推进APP,提供了更多的资源坑位及关于APP的下载游戏等,有很多主播和淘宝直播机构都找到我们在公众号"机构汇"交流,怎样通过引导拉新下载淘宝直播APP获得更多流量,下面跟大家分享引导的入口:引导粉丝下载"淘宝直播app",会有哪些奖励?1.三月初我们将推出"下载排行风云榜",对于进入到榜单的主播们,将奖励淘宝直播app的弹窗.焦点图.及频道坑

淘宝店铺要想获得最好的效果有效提供人气和交易量

淘宝店铺要想获得最好的效果有效提供人气和交易量,以下秘诀采集了相关成功人士的秘诀希 望能帮到您!! 秘诀一:问答类推广:百度.天涯.搜狗.有道等各大问答网站搜索与你商店相关产品的问题,如“购买”.“便宜”.“价格”一类,耐心回答,积极提供帮助, 最后留下q号,等待有人加.加q之后要细心回答并帮助客户,到一定程度放链接.如果有客户不会上淘宝要耐心教他注册.支付等等细节,不要嫌麻烦,如果你一 步步的教他购买,那他一定会是你的终身客户. 秘诀二:邮件推广: 1.运用qq群邮件推广.加q群,发群邮件.q

爱淘宝手机版分类导航菜单弹出效果设计

来和大家一起讨论讨论爱淘宝手机版的分类导航菜单弹出效果是如何设计实现的.先来看几个截图,一个是爱淘宝官方网站的截图,另一部分是我仿照爱淘宝做的截图 先声明一下我们只是借鉴爱淘宝手机版界面来进行技术的学习,如有博友看到请各位一定要理解.此博客毫无盗用淘宝核心技术. 第一张图是爱淘宝官网的截图,后面两张是我们自己仿照做的截图. 首先分析一下要实现的功能细节 点击手机页面商品列表的图片,导航菜单会从手机的右侧出来 导航菜单下面会有一个遮盖层,这样子的作用防止用户点击最底层的商品 最底层的商品可以在遮盖

Android PopupWindow 仿微信弹出效果

项目中,我需要PopupWindow的时候特别多,这个东西也特别的好使,所以我今天给大家写一款PopupWindow 仿微信弹出效果,这样大家直接拿到项目里就可以用了!首先让我们先看效果: 那么我首先先看下布局代码非常简单:如下 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/pop_layout" android:layout_

使用jqMobi开发app基础:弹出内容的设计

设计APP,由于屏幕很小,在PC网页山可以放在一体的内容,在APP中就不能放在一起了. 例如如下,项目出勤人员很多,需要弹出一个panel,然后让用户选择,如何设计呢? 项目出勤panel的内容: <div id="shenqingxiangmuchuqing" title="申请项目出勤" class="panel" data-load="loadshenqingxiangmuchuqingDetail" data-t

Android开发之多级下拉列表菜单实现(仿美团,淘宝等)

我们在常用的电商或者旅游APP中,例如美团,手机淘宝等等,都能够看的到有那种下拉式的二级列表菜单.具体如图所示: 上面两张图就是美团的一个二级列表菜单的一个展示.我相信很多人都想开发一个跟它一样的功能放到自己的APP中.好,接下来我们就开始动手,解决它. 1,结构分析 首先,我们给出这个下来菜单需要的组建.我们用线框图来分析. 1)如上图所示,最外围的是一个Activity,顶部包含了一个View的容器,这个容器主要是装载ToggleButton来实现诸如美团里面的"美食,全城,理我最近,刷选&

仿简书登录框,可删除内容或显示密码框的内容

简书App 是我很喜欢的一款软件.今天就模仿了一下他的登录框.先上图: 好了下面上代码,自定义ImgEditText 继承与EditText.重写一些方法. 1 package lyf.myimgedittextdemo; 2 3 import android.content.Context; 4 import android.graphics.Rect; 5 import android.graphics.drawable.Drawable; 6 import android.text.Edi

仿简书分享:UIActivityViewController系统原生分享

接下来介绍UIActivityViewController: 1. 创建要分享的数据内容,加在一个数组 ActivityItems里. NSString *textToShare = @"我是且行且珍惜_iOS,欢迎关注我!"; UIImage *imageToShare = [UIImage imageNamed:@"wang.png"]; NSURL *urlToShare = [NSURL URLWithString:@"https://github