效果:
bar.gif
实现步骤:
在自定义的tabbarcontroller中添加一个带颜色的view,UIAnimation来控制移动和显示
[self.view addSubview:self.colorView];
-(UIView *)colorView {
if (_colorView == nil) {
_colorView = [[UIView alloc] initWithFrame:CGRectMake(Screen_Width / 3 / 2 - 3,Screen_Height - BottomBarHeight + 42, 6, 6)];
_colorView.backgroundColor = yzColor(215, 100, 255);
_colorView.layer.cornerRadius = 3;
_colorView.layer.masksToBounds = YES;
}
return _colorView;
}
tabbarcontroller添加三个控制器A,B,C。从这三个控制器push到其他页面实现需要通知tabbarController将colorview隐藏掉,而在其他控制器回到这三个控制器的时候需要在viewDidLoad中将colorView展示出来
实现:在所有基础类中实现一个返回为布尔值的Block
typedef void(^YZBasicBoolBlock)(BOOL);
@property(nonatomic,copy)YZBasicBoolBlock appearBlock;
YZMainSearchBgCtl * vc = [[YZMainSearchBgCtl alloc] init];
vc.hidesBottomBarWhenPushed = YES;
if (self.appearBlock) {
self.appearBlock(YES);
}
[self.navigationController pushViewController:vc animated:YES];
- (void)viewDidAppear:(BOOL)animated {
[super viewDidAppear:animated];
if (self.appearBlock) {
self.appearBlock(NO);
}
}
在tabbar中添加新的子Controller时,将对应的子控制器的block实现一下
#pragma mark ------ 首页YZMainViewCtl
{
YZMainViewCtl * mainVc = [[YZMainViewCtl alloc] init];
UINavigationController * mainNaviVc = [[UINavigationController alloc] initWithRootViewController:mainVc];
mainVc.appearBlock = ^(BOOL status) {
if (status) {
self.colorView.hidden = YES;
}else {
[self backToCenter];
}
};
NSString * title = @"";
mainNaviVc.tabBarItem.title = title;
[mainNaviVc.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObject:selectedColor forKey:NSForegroundColorAttributeName] forState:UIControlStateSelected];
[mainNaviVc.tabBarItem setTitleTextAttributes:[NSDictionary dictionaryWithObject:textColor forKey:NSForegroundColorAttributeName] forState:UIControlStateNormal];
mainNaviVc.tabBarItem.image = yzTabbarImage(@"tb_1_gray");
mainNaviVc.tabBarItem.selectedImage = yzTabbarImage(@"tb_1_color");
[self addChildViewController:mainNaviVc];
NSLog(@"%@",mainNaviVc);
}
实际的backCenter
-(void)backToCenter {
self.colorView.hidden = NO;
[self.view bringSubviewToFront:self.colorView];
self.colorView.center = self.colorView.center;
// 第一个参数:延迟的时间
// // 可以通过改变队列来改变线程
// dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.25 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// // 需要延迟执行的代码
//
// });
// [UIView animateWithDuration:0.25 animations:^{
// }];
}