iOS资料汇总程序员在iOS开发的道路上越走越远

学习笔记-仿微博详情页面设计思路

2016-02-20  本文已影响503人  24K_纯帅

前言:


时间轴如下:
1 .首先看一遍实现效果还有源码,源码这里下载:https://github.com/SunnyLinSD/PersonDetailPage
2 .花一个早上的时间实现还有各个细节点分析
3 .差不多一个下午的时间写总结
4.本文仅仅供个人学习记录

效果如下:


demo.gif

思路如下:


- (void) setNavgationBarHide {
    
    /** 把tableview视图整体往下移动244个单位,因为这一部分是头部视图还有选项卡的大小 */
    // kHeaderViewHeight 和 kChooseViewHeight 都是前面说到的常量,一个是200,一个是44
    self.contentTableView.contentInset = UIEdgeInsetsMake(kHeaderViewHeight+kChooseViewHeight,0, 0, 0);
    
    /** 不要自动往下滚动64个单位.(64是原本状态栏还有导航栏的高度合) */
    self.automaticallyAdjustsScrollViewInsets = NO;

    /** 设置导航栏为透明,其原理就是传入一个没有图片,但又不为空的UIImage给导航栏 */
    [self.navigationController.navigationBar setBackgroundImage:[[UIImage alloc]init] forBarMetrics:UIBarMetricsDefault];

    /** 把导航栏上的分隔线用一个没有图片,但又不为空的UIImage给覆盖掉 */
    [self.navigationController.navigationBar setShadowImage:[[UIImage alloc] init]];
    
    /** 添加自定义title */
    UILabel *contentLable = [[UILabel alloc] init];
    contentLable.text = @"微博个人详情页面";
    /** 让label根据文字的大小自己调整大小 */
    [contentLable sizeToFit];
    self.navigationItem.titleView = contentLable;
    
    /** 默认隐藏title */
    contentLable.textColor = [UIColor colorWithWhite:0 alpha:0];
    
    /** 让控制器的self.contentLabel指向contentLable,这样方便我们后续对它进行操作 */
    self.contentLabel = contentLable;
}
微博详情页面offset计算思路.png
/** 计算偏移量,originalOffset也就是上面提到的原始偏移量,因为我们把tableView往下移动了244个单位,所以这个原始偏移量就是这个值 */
  CGFloat offset = scrollView.contentOffset.y - originalOffset;
// 偏移高度 = 默认高度 - 偏移量
CGFloat offsetHeight = kHeaderViewHeight - offset;
/** 悬停效果,其实就是不让图片的高度继续减小,最小只能是64 */
  if (offsetHeight < kHeaderViewMinHeight) {
      offsetHeight = kHeaderViewMinHeight;
  }
  
  /** 通过修改Height达到效果,当向上滚动时,选项卡向上滚动的速度比头部视图的还要快一点 */
  self.headViewHeightConstraint.constant = offsetHeight;

效果如图:

微博详情页面实现悬停效果.png
  // alpha 值计算 : 偏移量 / (headView默认高度 - headView最小高度) ,当大于1时,导航栏和contentLabel就会完全显示
  CGFloat alpha = offset / (kHeaderViewHeight - kHeaderViewMinHeight);
  
  // 前面我们设置好的 contentLabel ,可以在这里去动态设置它的alpha值
  self.contentLabel.textColor = [UIColor colorWithWhite:0 alpha:alpha];
  
  // 这里直接使用袁峥的Category方法,返回一张通过传入颜色,返回一张1*1的图片,navigationBar会图片拉伸填充到整个导航栏
  [self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor colorWithWhite:1 alpha:alpha]] forBarMetrics:UIBarMetricsDefault];

结语:


若大家在观看本文的过程发现我有任何的理解错误,可以在本文下进行评论,我会第一时间进行修改,最后,谢谢您的阅读!
我的源码地址:https://github.com/SunnyLinSD/PersonDetailPage

上一篇 下一篇

猜你喜欢

热点阅读