封装TabBarViewController
http://www.jianshu.com/p/0496c5caff6a
非根VC下, 处理tabbar的显示隐藏
重写自定义的UINavigationController中的push方法
-(void)pushViewController:(UIViewController *)viewController animated:(BOOL)animated{
if (self.childViewControllers.count==1) {
viewController.hidesBottomBarWhenPushed = YES; //viewController是将要被push的控制器
}
[super pushViewController:viewController animated:animated];
}
设置TabBarItem的字体大小
[childVC.tabBarItem setTitleTextAttributes:@{ NSFontAttributeName : [UIFont systemFontOfSize:13.0] } forState:UIControlStateNormal];
TabBar的字体颜色
item = [item initWithTitle:titleStr image:unselectedImage selectedImage:selectedImage];
NSDictionary *dicNormal = @{NSForegroundColorAttributeName:[UIColor whiteColor]};
NSDictionary *dicSelected = @{NSForegroundColorAttributeName:[UIColor redColor]};
[item setTitleTextAttributes:dicNormal forState:UIControlStateNormal];
[item setTitleTextAttributes:dicSelected forState:UIControlStateSelected];
设置tabBar的颜色
UIView *bgView = [[UIView alloc] initWithFrame:self.tabBar.bounds];
bgView.backgroundColor = mainGrayColor;
[self.tabBar insertSubview:bgView atIndex:0];
self.tabBar.opaque = YES;
TabBar点击Item的动画效果
http://www.cnblogs.com/yajunLi/p/6288811.html
原理:利用UITabBarController实现,在tabbar的 didSelectItem 代理里添加动画效果。
@interface MainTabbarVC ()<UITabBarControllerDelegate>
@property (nonatomic,assign) NSInteger indexFlag;
//记录上一次点击tabbar的Item,使用时记得先在viewDidLoad初始化 = 0
@end
// 代理方法-点击TabBar Item时调用
-(void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item{
// 当前点击的Item 的 index
NSInteger index = [self.tabBar.items indexOfObject:item];
//对比,判断。如果点击的不是同上一个按钮,则执行动画
if (index != self.indexFlag) {
// 把TabBar的子控件UITabBarButton添加到数组 暂存
NSMutableArray *arry = [NSMutableArray array];
for (UIView *btn in self.tabBar.subviews) {
if ([btn isKindOfClass:NSClassFromString(@"UITabBarButton")]) {
[arry addObject:btn];
}
}
//添加动画---将下面的代码块直接拷贝到此即可---
... ...
self.indexFlag = index; // 保存index
}
}
1.先放大再缩小
//放大效果,并回到原位
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//速度控制函数,控制动画运行的节奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.duration = 0.2; //执行时间
animation.repeatCount = 1; //执行次数
animation.autoreverses = YES; //完成动画后会回到执行动画之前的状态
animation.fromValue = [NSNumber numberWithFloat:0.7]; //初始伸缩倍数
animation.toValue = [NSNumber numberWithFloat:1.3]; //结束伸缩倍数
[[arry[index] layer] addAnimation:animation forKey:nil];
2.Z轴旋转
//z轴旋转180度
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.rotation.z"];
//速度控制函数,控制动画运行的节奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.duration = 0.2; //执行时间
animation.repeatCount = 1; //执行次数
animation.removedOnCompletion = YES;
animation.fromValue = [NSNumber numberWithFloat:0]; //初始伸缩倍数
animation.toValue = [NSNumber numberWithFloat:M_PI]; //结束伸缩倍数
[[arry[index] layer] addAnimation:animation forKey:nil];
3.Y轴位移
//向上移动
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"];
//速度控制函数,控制动画运行的节奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.duration = 0.2; //执行时间
animation.repeatCount = 1; //执行次数
animation.removedOnCompletion = YES;
animation.fromValue = [NSNumber numberWithFloat:0]; //初始伸缩倍数
animation.toValue = [NSNumber numberWithFloat:-10]; //结束伸缩倍数
[[arry[index] layer] addAnimation:animation forKey:nil];
4.放大并保持
//放大效果
CABasicAnimation *animation = [CABasicAnimation animationWithKeyPath:@"transform.scale"];
//速度控制函数,控制动画运行的节奏
animation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animation.duration = 0.2; //执行时间
animation.repeatCount = 1; //执行次数
animation.removedOnCompletion = NO;
animation.fillMode = kCAFillModeForwards; //保证动画效果延续
animation.fromValue = [NSNumber numberWithFloat:1.0]; //初始伸缩倍数
animation.toValue = [NSNumber numberWithFloat:1.15]; //结束伸缩倍数
[[arry[index] layer] addAnimation:animation forKey:nil];
//移除其他tabbar的动画
for (int i = 0; i<arry.count; i++) {
if (i != index) {
[[arry[i] layer] removeAllAnimations];
}
}
滚动时TabBar位移动画
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
[UIView animateWithDuration:1 animations:^{
self.tabBarController.tabBar.transform = CGAffineTransformMakeTranslation(0, 49);
}];
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
[UIView animateWithDuration:1 animations:^{
self.tabBarController.tabBar.transform = CGAffineTransformIdentity;
}];
}