- 前言:
- 看这个简单demo你可以学到很多东西。
涉及导航栏随着tableView滑动是否隐藏,随着tableView的滑动让TabBar隐藏,停止滑动显示TabBar。还有NavigationController的titleView动态缩放效果,还还还加了UITableView分区展开与收起。
虽然没有很详细的介绍每一个步骤,不过大家应该都看的懂,看不懂的可以联系我
先看一下简单的效果:
代码:
// ViewController.m
// turnView
//
// Created by ming on 16/5/28.
// Copyright © 2016年 ming. All rights reserved.
#import "ViewController.h"
#define MGSCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define MGSCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
@interface ViewController ()
@end
@implementation ViewController
{
UISegmentedControl *segment;
UIView *_leftView;
UIView *_rightnView;
}
- (void)viewDidLoad {
[super viewDidLoad];
[self setMainView];
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)setMainView{
UINavigationBar *navBar = [UINavigationBar appearance];
navBar.barTintColor = [UIColor purpleColor];
navBar.tintColor = [UIColor colorWithRed:0.8 green:0.5 blue:1 alpha:1.000];
navBar.translucent = NO;
NSArray *segArr=@[@"订单",@"商品"];
//设置segment
segment=[[UISegmentedControl alloc] initWithItems:segArr];
segment.frame=CGRectMake(MGSCREEN_WIDTH/2-266/4, 7, 266/2, 30);
[segment addTarget:self action:@selector(selectIndex:) forControlEvents:(UIControlEventValueChanged)];
segment.layer.borderColor=[UIColor whiteColor].CGColor;
segment.tintColor=[UIColor orangeColor];
NSDictionary *dics = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:15.0f] forKey:NSFontAttributeName];
[segment setTitleTextAttributes:dics forState:UIControlStateNormal];
segment.selectedSegmentIndex = 0;
[self.navigationController.navigationBar addSubview:segment];
_leftView=[[UIView alloc] initWithFrame:(CGRectMake(0, 64, MGSCREEN_WIDTH, MGSCREEN_HEIGHT-64))];
_leftView.backgroundColor=[UIColor redColor];
[self.view addSubview:_leftView];
_rightnView=[[UIView alloc] initWithFrame:(CGRectMake(0, 64, MGSCREEN_WIDTH, MGSCREEN_HEIGHT-64))];
_rightnView.backgroundColor=[UIColor greenColor];
[self.view addSubview:_rightnView];
[self.view bringSubviewToFront:_leftView];
}
- (void)selectIndex:(UISegmentedControl *)segmentor{
if(segmentor.selectedSegmentIndex==0){
[self animationWithView:self.view WithAnimationTransition:(UIViewAnimationTransitionFlipFromLeft)];
[self.view bringSubviewToFront:_leftView];
}else{
[self animationWithView:self.view WithAnimationTransition:(UIViewAnimationTransitionFlipFromRight)];
[self.view bringSubviewToFront:_rightnView];
}
}
- (void) animationWithView:(UIView *)view WithAnimationTransition:(UIViewAnimationTransition) transition
{
[UIView animateWithDuration:0.5f animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:transition forView:view cache:YES];
}];
}
@end
升级版
给Tabbar 加了动画(拖动tableView的时候会隐藏,不拖拽会显示)
也对cell 加了动画处理(cell显示的时候会有动画效果)
导航栏的渐变效果
-
先看一下升级的效果:
#import "ViewController.h"
#define MGSCREEN_WIDTH [UIScreen mainScreen].bounds.size.width
#define MGSCREEN_HEIGHT [UIScreen mainScreen].bounds.size.height
@interface ViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UISegmentedControl *segment;
UITableView *_leftView;
UITableView *_rightnView;
UIView *_topBgView;
}
@end
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setMainView];
}
-(void)viewWillAppear:(BOOL)animated
{
[super viewWillAppear:YES];
self.navigationController.navigationBar.hidden=YES;
}
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
- (void)setMainView{
// UINavigationBar *navBar = [UINavigationBar appearance];
// UIBarButtonItem *barItem = [UIBarButtonItem appearance];
// if(ISIOS8)
// navBar.translucent = NO;
// else
// self.navigationBar.translucent =NO;
// navBar.barTintColor = naBarTiniColor;
// navBar.tintColor = [UIColor colorWithRed:1 green:1 blue:1 alpha:1.000];
// [navBar setTitleTextAttributes:@{NSForegroundColorAttributeName:[UIColor whiteColor]}];
//
// [navBar setTitleTextAttributes:@{
// NSForegroundColorAttributeName :[UIColor whiteColor] ,
// NSFontAttributeName : [UIFont boldSystemFontOfSize:18]
// }];
//
//
// if(barItem==self.navigationItem.leftBarButtonItem){
// [barItem setTitleTextAttributes:@{
// NSForegroundColorAttributeName : [UIColor clearColor],
// NSFontAttributeName : [UIFont systemFontOfSize:0]
// } forState:UIControlStateNormal];
// }else{
// [barItem setTitleTextAttributes:@{
// NSForegroundColorAttributeName : [UIColor whiteColor],
// NSFontAttributeName : [UIFont systemFontOfSize:13]
// } forState:UIControlStateNormal];
//
// }
// UINavigationBar *navBar = [UINavigationBar appearance];
// navBar.backgroundColor = [UIColor blueColor];
// navBar.barTintColor = [UIColor purpleColor];
// navBar.tintColor = [UIColor colorWithRed:0.8 green:0.5 blue:1 alpha:1.000];
// navBar.translucent = NO;
// [navBar setBackgroundImage:[UIImage imageNamed:@""] forBarMetrics:UIBarMetricsDefault];
_leftView=[[UITableView alloc] initWithFrame:(CGRectMake(0, 64, MGSCREEN_WIDTH, MGSCREEN_HEIGHT-64))];
_leftView.delegate = self;
_leftView.dataSource = self;
_leftView.backgroundColor=[UIColor redColor];
[self.view addSubview:_leftView];
_rightnView=[[UITableView alloc] initWithFrame:(CGRectMake(0, 64, MGSCREEN_WIDTH, MGSCREEN_HEIGHT-64))];
_rightnView.backgroundColor=[UIColor greenColor];
[self.view addSubview:_rightnView];
_topBgView=[[UIView alloc] initWithFrame:(CGRectMake(0, 0, MGSCREEN_WIDTH, 64))];
// _topBgView.alpha = 0.0f;
[self.view addSubview:_topBgView];
NSArray *segArr=@[@"订单",@"商品"];
//设置segment
segment=[[UISegmentedControl alloc] initWithItems:segArr];
segment.frame=CGRectMake(MGSCREEN_WIDTH/2-266/4, 25, 266/2, 30);
[segment addTarget:self action:@selector(selectIndex:) forControlEvents:(UIControlEventValueChanged)];
segment.layer.borderColor=[UIColor whiteColor].CGColor;
segment.tintColor=[UIColor orangeColor];
NSDictionary *dics = [NSDictionary dictionaryWithObject:[UIFont systemFontOfSize:15.0f] forKey:NSFontAttributeName];
[segment setTitleTextAttributes:dics forState:UIControlStateNormal];
segment.selectedSegmentIndex = 0;
[self.view insertSubview:segment aboveSubview:_topBgView];
[self.view bringSubviewToFront:_leftView];
}
#pragma mark - segment的target
- (void)selectIndex:(UISegmentedControl *)segmentor{
if(segmentor.selectedSegmentIndex==0){
[self animationWithView:self.view WithAnimationTransition:(UIViewAnimationTransitionFlipFromLeft)];
[self.view bringSubviewToFront:_leftView];
}else{
[self animationWithView:self.view WithAnimationTransition:(UIViewAnimationTransitionFlipFromRight)];
[self.view bringSubviewToFront:_rightnView];
}
}
#pragma mark - 翻转动画
- (void) animationWithView:(UIView *)view WithAnimationTransition:(UIViewAnimationTransition) transition
{
[UIView animateWithDuration:0.5f animations:^{
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationTransition:transition forView:view cache:YES];
}];
}
#pragma mark - scrollView代理
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[UIView animateWithDuration:1 animations:^{
// 给Tabbar 加入动画 self.tabBarController.tabBar.transform = CGAffineTransformMakeTranslation(0, 49);
}];
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
UIColor *color = [UIColor brownColor];
CGFloat offsetY = scrollView.contentOffset.y;
if (offsetY > 0) {
CGFloat alpha = 1 - ((64 - offsetY) / 64);
if (alpha>1) {
alpha = 1;
}
_topBgView.backgroundColor = [color colorWithAlphaComponent:alpha];
} else {
_topBgView.backgroundColor = [color colorWithAlphaComponent:0];
}
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
[UIView animateWithDuration:1.0 delay:0.8 options:UIViewAnimationOptionOverrideInheritedCurve animations:^{
self.tabBarController.tabBar.transform = CGAffineTransformIdentity;
} completion:nil];
}
#pragma mark - 数据源
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
return 40;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:@"cell"];
if (cell==nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"cell"];
}
cell.textLabel.text = [NSString stringWithFormat:@"ming-%ld",indexPath.row];
return cell;
}
#pragma mark - 代理
/**
* 添加cell滚动的动画
*/
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
// 防止重复添加动画
[cell.layer removeAnimationForKey:@"ming"];
CAKeyframeAnimation *keyframeAnimation = [CAKeyframeAnimation animationWithKeyPath:@"transform.rotation.y"];
keyframeAnimation.values = @[@(-2),@(-1),@(1),@(2)];
keyframeAnimation.duration = 0.3;
[cell.layer addAnimation:keyframeAnimation forKey:@"ming"];
}
@end
-
升升升升升级版
首先加了iOS 实现NavigationController的titleView动态缩放效果,还加了UITableView分区展开与收起
-
再看升升升升升级版的效果:
觉得不错给个赞,Thanks