美文网首页iOS学习iOS 开发每天分享优质文章iOS Developer
仿简书导航栏图片随着UIScrollView的滚动放大缩小

仿简书导航栏图片随着UIScrollView的滚动放大缩小

作者: StephenCurry300 | 来源:发表于2016-11-15 14:34 被阅读324次

一.前言

今天我们就来实现简书的导航栏图片随着UIScrollView的滚动来改变的效果,简书的效果图如下:

简书效果图

二.思路

下面我就说一下我的实现思路,其实思路很简单,主要就是2步:

  • 在UINavigationBar上添加图片
  • 实现UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView

下面就具体说一下这2步是如何实现的。

1.在UINavigationBar上添加图片

这一步其实很简单,但是我在做的时候也踩了一个坑,最开始我是将UIImageView赋值给navigationBar的titleView,让UIImageView替代titleView,结果整个UIImageView被拉的很长,就像下面一样:

UIImageView替代titleView

所以不能这样做,要将UIImageView添加到UINavigationBar上,即:

[self.navigationController.navigationBar addSubview:self.imageView];

NOTE:
因为navigationBar是所有的ViewController共享的,这样做就会有一个问题,那就是当你push或pop到其他页面时,这个图片仍然在navigationBar上,这不是我们所希望的,所以我们要啦解决这个问题。
解决这个问题其实很简单,就是隐藏系统的navigationBar,然后自定义一个navigationBar即可。

  1. 将系统导航栏隐藏,这个在storyboard或是代码里都可以隐藏;
  2. [self.navigationController.navigationBar addSubview:self.imageView];改成[self.navigationBar addSubview:self.imageView];,此处的navigationBar是我们自定义的,通过IBOutLet拖出来的;
  3. 在viewWillAppear里面隐藏系统的navigationBar,在viewWillDisappear里面显示系统的navigationBar。
- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:animated];
}
- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:animated];
}
2.实现UIScrollView的代理方法- (void)scrollViewDidScroll:(UIScrollView *)scrollView

这一步是关键,要根据UIScrollView滚动的Y值进行计算,具体代码如下:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    CGFloat contentOffsetY = scrollView.contentOffset.y;
    CGFloat scale = 1 - contentOffsetY / 300.0;
    if (scale < 0.5) {
        scale = 0.5;
    } else if (scale > 1.0) {
        scale = 1.0;
    }
    self.imageView.transform = CGAffineTransformMakeScale(scale, scale);
}

ok,搞定了!🙃🙃🙃。
效果如下图:

最终效果图

最后上一个Demo

相关文章

网友评论

    本文标题:仿简书导航栏图片随着UIScrollView的滚动放大缩小

    本文链接:https://www.haomeiwen.com/subject/snzkpttx.html