上周的 引起热烈的反响, 小弟真的是受宠若惊, 还有些同学私信求更新的, 我特别推崇这种互帮互助的学习方式, 有利于共同学习, 好了开始今天的话题!
今天我们需要实现的功能是: 酷炫的Button动效, 大家不禁要问, 一个小小的Button, 能够搞出些什么花头呢? 想必大家都等不及了吧, 来, 不急我们step by step 一步步来~ (今天的内容过多, 示例代码不会很详尽, 具体请到github上下载)
有同学提出效果图放开头会比较好!! 大家可以先参考下, 先想想实现方法^ ^
导航栏遗漏细节处理
上周有些同学说, 渐变导航栏有几个细节不是尽善尽美, 今天我们就先来将其处理一下!!
1. 当push到下一界面时搜索栏的UI始终出现
这其实非常的正常, 我们是将searchBar加载到了navigationController.view
上, 当push到下个见面自然会存在了, 好的, 为了处理这个问题, 我们新建一个viewcontroller, 然后作为栈顶控制器.
1 2 3 4 5 6 7 8 9 10 |
- (void)viewWillDisappear:(BOOL)animated { [super viewWillDisappear:animated]; [self.searchBarView removeFromSuperview]; } - (void)viewDidAppear:(BOOL)animated { [super viewDidAppear:animated]; [self.navigationController.view addSubview:self.searchBarView]; [self.searchBarView loomingAnimationWithDuration:kTimeInterval]; } |
在生命周期方法中添加和删除, 当view完全出现的时候执行动画显现即可!
可是这样当我们使用交互转场的时候发现 搜索栏突然就消失了(这实在是太生硬了吧!!)
我们在SQLifestyleSearchCell中再添加一个searchBarView
就可以完美解决啦~~
2. 当push到下一界面时会调用scorllDidScroll方法发生位移
好的, 我们来解决第二个问题, 当push到下一界面时会调用scorllDidScroll是系统自动会调用的, 我们为了解决这个问题首先要讲调用给屏蔽掉!
1 |
[self setAutomaticallyAdjustsScrollViewInsets:NO]; |
在scorllDidScroll方法中添加上述方法就是屏蔽系统自动调用的问题! 但这样会将tableView上移64, 我们使用contentInset就能完美解决啦~~
1 |
_tableView.contentInset = UIEdgeInsetsMake(0, 0, 49, 0); |
这时我们碰到了一个问题, 当我们push进入到下个页面时, 导航栏的颜色会和栈底控制器保持同步!!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
- (void)navigationBarGradualChangeWithScrollView:(UIScrollView *)scrollView titleView:(UIView *)titleView movableView:(UIView *)movableView offset:(CGFloat)offset color:(UIColor *)color { [self viewWillLayoutSubviews]; [self setAutomaticallyAdjustsScrollViewInsets:NO]; float alpha = 1 - ((offset - scrollView.contentOffset.y) / offset); [self setNavigationBarColor:color alpha:alpha]; titleView .hidden = scrollView.contentOffset.y > offset ? NO : YES; movableView.hidden = !titleView.hidden; } - (void)setNavigationBarColor:(UIColor *)color alpha:(CGFloat)alpha { [self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[color colorWithAlphaComponent:alpha > 0.95f ? 0.95f : alpha]] forBarMetrics:UIBarMetricsDefault]; if (self.navigationController.viewControllers.count > 1) { UIView * view = [[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.width, 64)]; view.backgroundColor = color; [self.view addSubview:view]; } } |
我们在下一个页面设置背景色, 并在导航栏的下面贴一层和导航栏相同颜色的view,即可解决!!
但是这样又有问题了, 我们把栈顶控制器导航栏的颜色给带回到栈底控制器了, 所以解决方法就是在view将要出现的时候, 计算颜色值!!
1 2 3 4 |
- (void)viewWillAppear:(BOOL)animated { [super viewWillAppear:animated]; [self scrollViewDidScroll:self.tableView]; n-sy">; [self scrollViewDidScroll:self.tableView]; ͥ步来~ (今天的内容过多, 示例代码不会很详尽, 具体请到github上下载)
有同学提出效果图放开头会比较好!! 大家可以先参考下, 先想想实现方法^ ^ 导航栏遗漏细节处理上周有些同学说, 渐变导航栏有几个细节不是尽善尽美, 今天我们就先来将其处理一下!! 1. 当push到下一界面时搜索栏的UI始终出现这其实非常的正常, 我们是将searchBar加载到了
在生命周期方法中添加和删除, 当view完全出现的时候执行动画显现即可! 2. 当push到下一界面时会调用scorllDidScroll方法发生位移好的, 我们来解决第二个问题, 当push到下一界面时会调用scorllDidScroll是系统自动会调用的, 我们为了解决这个问题首先要讲调用给屏蔽掉!
在scorllDidScroll方法中添加上述方法就是屏蔽系统自动调用的问题! 但这样会将tableView上移64, 我们使用contentInset就能完美解决啦~~
这时我们碰到了一个问题, 当我们push进入到下个页面时, 导航栏的颜色会和栈底控制器保持同步!!
我们在下一个页面设置背景色, 并在导航栏的下面贴一层和导航栏相同颜色的view,即可解决!! 但是这样又有问题了, 我们把栈顶控制器导航栏的颜色给带回到栈底控制器了, 所以解决方法就是在view将要出现的时候, 计算颜色值!!
|