今天正好有時間教大家很常見的一個效果。這也是筆者第一次寫博客,后面會不定期的更新內容。好了,話不多說,進入正題吧。
其實實現此此效果很簡單。只需要幾行代碼就可以搞定。
在很多的App中,其實都有這樣的需求,上下滾動時候,要其頭像也跟著發生相應的變化(用戶頭像是在系統的導航條)。以前有朋友問過我,可能有的朋友會嘗試自定義導航view。其實是沒有必要的,之間使用系統自帶的導航即可!
通過此片學習,您將學習一下知識點:
1.如何分析實現原理
2.如何實現縮放效果
3.如何講計算縮放系數

- (void)configUI{    _tableView = [[UITableView alloc]initWithFrame:self.view.bounds style:UITableViewStylePlain];    _tableView.dataSource = self;    _tableView.delegate = self;    [_tableView registerClass:[UITableViewCell class] forCellReuseIdentifier:@"UITableViewCell"];    [self.view addSubview:_tableView];       UIView *titleView = [[UIView alloc] init];    self.navigationItem.titleView = titleView;    _headerImageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"header.jpg"]];    _headerImageView.frame = CGRectMake(0, 0, 70, 70);    _headerImageView.layer.masksToBounds = YES;    _headerImageView.layer.cornerRadius = 35;    _headerImageView.center = CGPointMake(titleView.center.x, 0);    [titleView addSubview:_headerImageView];}這里主要是創建表格和titleView,估計你們也看到了我為什么不把imageView直接作為titleVIew,而是我自定義一個view,這樣做的好處就是因為titleView會自動被系統設置大小的,而正常情況下,我們的頭像是有自己的大小。接下來就是最關鍵的地方了,直接上代碼- (void)scrollViewDidScroll:(UIScrollView *)scrollView {    if ([scrollView isEqual:self.tableView]) {        CGFloat offsetY = self.tableView.contentOffset.y + self.tableView.contentInset.top;        CGFloat scale = 1.0;        if (offsetY < 0) {// 放大            // 允許下拉放大的最大距離為250            scale = MIN(1.5, 1 - offsetY / 250);        } else if (offsetY > 0) { // 縮小            // 允許向上超過導航條縮小的最大距離為250            scale = MAX(0.4, 1 - offsetY / 250);        }        self.headerImageView.transform = CGAffineTransformMakeScale(scale, scale);    }}估計大家看到這里,都明白了,那我就不多說了小結
閱讀完本篇文章,筆者相信大家都可以熟練掌握了,其實就幾行代碼的事情呀,是不是很簡單呢?源代碼
本篇文章對應的源代碼下載地址:https://github.com/WSmalan/WSScaleHeaderImage
新聞熱點
疑難解答