iOS 类似虾米音乐侧滑动画解析(2)
2016-06-26 20:45
519 查看
承接上文,分析侧滑效果。我们已经对ContentView(A)做出了分析与大致实现方法。这次,我们去分析背景的实现方式。
观察,背景,背景图片在滑动的过程中不变,且有高斯模糊效果。视图分为两部分,上方的是用户的一些基本信息(头像,昵称,邮件图标,播放次数,关注,粉丝)下面是有tableview编写的菜单选择,可上下滑动。在ContentView(A)视图滑动过程中,menuViewController (B)中的视图也有线性的变化,位置大小的线性变化。线性变化值可以参考ContentView(A)线性变化比例。[b]并且有点击屏幕使[b]menuView隐形消失效果。[/b][/b]那既然这样,我们不妨创建一个总视图(D)包含back[b]imageview(C)、menuviewController(B)、以及contentviewController(A)。在分别建立A、B、C视图,[/b]作为D的子controller。
contentviewController , 定义menuviewController
* leftMenuViewController, contentviewController * contentViewController 定义UIview*menuViewContainer(菜单视图),
UIview*contentViewContaioner(内容视图), UIimageView*backgroundImageView(背景视图)UIview*gestureRecognizerView(点击手势视图);
以添加菜单视图为例。
[self.view addSubview:self.menuViewContainer];
self.menuViewContainer.frame = self.view.bounds;
self.menuViewContainer.backgoundColor = [UIColor clearColor];//设置背景色为透明
if(self.leftmenuviewController)
{
[self addChildViewController:self.leftMenuViewController]; //作为子Controller;
//设置一些属性
self.leftMenuViewController.view.frame = self.view.bounds;
self.leftMenuViewController.view.background = [UIcolor clearColor];
self.leftMenuViewController.vive.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[self.menuViewContainer addSubview:self.leftMenuViewController.view];
[self.leftMenuViewController didMoveToParentViewController:self];
}
以此,我们类似的给self.contentViewContainer加载 self.ContentViewController.view
//定义UIPanGestureRecognizer *edgePanGesture
[self.contentViewContainer addGustureRecognizer:edgePanGesture]; //给contentViewContainer添加移动手势。
[self.contentViewContainer addSubview:self.gestureRecognizerView]; //将点击手势区域作为contentView的子视图
//定义点击手势
UITapGestureRecognizer *tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(tapGestureRecognizer:)];
[self.gestureRecognizerView addGestureRecognizer:tap];
//滑动contentViewContainer时,可参见上片,contentViewContainer手势方法
- (void)panGestureRecognizer:(UIScreenEdgePanGestureRecognizer
*)recognizer{
if (recognizer.state ==UIGestureRecognizerStateBegan)
{
//添加阴影,在http://www.jianshu.com/p/3a350bb9d9ee下载工程,YQSlideMenuController里有完整步骤,可参考。
}elseif(recognizer.state ==UIGestureRecognizerStateChanged){
float trueDistance = distance + point.x; //实时距离。
//计算上文提到的y与x的关系方法。
//平移与缩放的动画
//判断不同的状态情况,填写不同的平移缩放参数
self.contentViewContainer = CGpointMake(self.view.center.x +
trueDistance,self.view.center.y); //中心点平移
self.contentViewContainer =CGAffineTransformScale(CGAffineTransformIdentity,y,y);
CGAffineTransformScale 缩放方法。
self.menuViewContainer.transform = CGAffinerTransformMakeScale(a,b);
self.menuViewContainer.transform = CGAffinerTransformScale(self.menuViewContainer.transform,m,n);
}elseif(recognizer.state ==UIGestureRecognizerStateEnded){
//根据位置做自动停靠,也可结合手势滑动的方向做自动停靠,判断MenuView是否显示的状态。
}
}
//我们应该设置点击时候,有一个判断Menu是否处于显示与隐藏的状态。BOOL menuHidden; 并且在上述滑动手势判断时候,把对应的情况加进去。提供点击方法,在点击中做Menu的显示与隐藏的方法。
-(void)tapGestureRecgnizer:(UITapGextureRecognizer *)recognizer{
if(!self.menuHidden){
[self hideMenu];
}
}
-(void)hideMenu{
if(!self.menuHidden){
[self shoeMenu:NO];
}
}
- (void)shoeMenu:(BOOL)show{
//主要是做显示与隐藏的动画效果,利用UIView animateWithDurantion time animations:^{}方法;
[UIView animateWithDuration:duration aninations:^{
if(show){
self.contentViewContainer.transform = CGAffinerTransformMakeTranslation();
self.contentViewContainer.transform = CGAffinerTransformScela();
self.menuViewContainer.transform = CGAfinerTransformIdentity;
}else{
self.contentViewContainer,transform = CGAffinerTransformIndetity;
self.contentViewScale = 1;
self.menuViewContainer.transform = CGAffineTransformMakeScale();
self.menuViewContainer.transform = CGAffinerTransformTranslate();
}
}completion:^(BOOL finished){
self.menuHidden = !show;
self.gestureRecognizerView.hidden = !show;
}];
}
大致。思路,如此。有些逻辑判断并没有展示出来,以借鉴,以分析,以宽容,以希望与努力。
相关文章推荐
- IOS视图控制器自定义动画效果
- iOS中的动画
- iOS 模态视图,阻尼动画
- ios 变速效果
- ios动画中抖动动画效果的实现与CALayer动画的基本理解
- iOS中CAAnimation的keyPath
- IOS 基础动画Core Animation
- iOS定时器、延迟执行
- CAAnimation解读
- CABasicAnimation精讲
- CATransition动画精讲
- iOS动画—UIView动画以及CoreAnimation动画
- UIView中视图关系分析以及视图跳转动画的使用
- IOS简单的动画
- CABasicAnimation的基本使用方法(移动·旋转·放大·缩小)
- IOS动画的使用方法总结-下拉框的简单实现
- iOS中字迹动画效果
- iOS<咸鱼APP>新特性界面-视频动画
- iOS复杂动画之抽丝剥茧(Objective-C & Swift)
- ios制作一个速度表盘