乐虎游戏|乐虎国际登录|欢迎你

iOS 实现NavigationController的titleView动态缩放效果

日期:2020-03-21编辑作者:计算机资讯

写在前边

率先声明哈,不是广告,我哪怕用的时候感觉那些意义比较有趣,就想着完结了一下。效果如图:

图片 1PageBlurTestGif.gif

接下去大概的说一下思路吧~

已经心水简书的私人商品房基本分界面包车型客车NavigationController动态缩放titleView效果,也正是如下图的功效:

让我们一块学习一下tableView联合浮动,笔者那也是精短书上看来的一篇文章,来亲自贯彻一下。学习小说地址:http://www.jianshu.com/p/dfb73aa08602

概况思路

唯恐大家来看这种意义的贯彻的时候,首先想着的是自身在此个调控器中左右各放二个tableView,然后举办关联。笔者是用了另一个思路,具体如下:我建了七个类LGJCategoryVC用来盛放左侧写着第几类的tableView和LGJProductsVC用来怒放左侧写在各类付加物的tableView。然后将LGJProductsVC作为LGJCategoryVC的childViewController,将LGJProductsVCviewaddSubView到LGJCategoryVCview上。代码完结如下:

- createProductsVC { _productsVC = [[LGJProductsVC alloc] init]; _productsVC.delegate = self; [self addChildViewController:_productsVC]; [self.view addSubview:_productsVC.view];}

那般做有怎么着好处吗?总之正是将tableView分离,各自行使八个congtroller,这样做使每一个调整器管理自个儿的tableView里头的平地风波,能够更加好的分开代码,收缩三个tableView里头的耦合度,同期也幸免了把多少个 tableView献身二个controller里产生一个controller代码的冗余,那样使逻辑更清晰。

收起来讲一下大家点击左侧tableViewcell的时候怎样使左侧的tableView随后滑动。小编在LGJCategoryVC约等于左臂tableView的那一个代理方法中didSelectRowAtIndexPath做了些操作:

- tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { if (_productsVC) { [_productsVC scrollToSelectedIndexPath:indexPath]; }}

在那之中那么些scrollToSelectedIndexPath艺术是在_productsVC中宣示的。这么些主意正是跃然纸上调解左边tableView滑动的。

#pragma mark - 一级tableView滚动时 实现当前类tableView的联动- scrollToSelectedIndexPath:(NSIndexPath *)indexPath { [self.productsTableView selectRowAtIndexPath:([NSIndexPath indexPathForRow:0 inSection:indexPath.row]) animated:YES scrollPosition:UITableViewScrollPositionTop];}

咱俩供给的只是让侧边tableViewsectionHeaderView追随侧面包车型客车点击cell运动到顶上部分就能够了,所以在那大家设置selectRowAtIndexPath:([NSIndexPath indexPathForRow:0 inSection:indexPath.row])

接下去就是当咱们滑动右侧tableView的时候左臂的tableViewcell追随滑动。这里大家在LGJProductsVC类中注明了二个合计。

@protocol ProductsDelegate <NSObject>- willDisplayHeaderView:(NSInteger)section;- didEndDisplayingHeaderView:(NSInteger)section;@end

还要注明八个变量,这四个变量极其实用。

@property(nonatomic, assign)BOOL isScrollUp;//是否是向上滚动@property(nonatomic, assign)CGFloat lastOffsetY;//滚动即将结束时scrollView的偏移量

实际功用就在此了:

#pragma mark - scrollViewDelegate- scrollViewDidScroll:(UIScrollView *)scrollView { NSLog(@"_lastOffsetY : %f,scrollView.contentOffset.y : %f", _lastOffsetY, scrollView.contentOffset.y); _isScrollUp = _lastOffsetY < scrollView.contentOffset.y; _lastOffsetY = scrollView.contentOffset.y; NSLog(@"______lastOffsetY: %f", _lastOffsetY);}

在此个措施中,_isScrollUp用来决断左侧的tableView是不是是向上海滑稽剧团,当scrollView滑动时,大家用上次的偏移量和本次的偏移量作对照,假如上次的偏移量小于本次的偏移量表明tableView是升高滑动的。(关于contentOffset笔者在上篇的《iOS 落成NavigationController的titleView动态缩放效果》链接: 中有大约介绍)那时候,_isScrollUp为YES,反之为NO。大家遵照_isScrollUp其一关键的标志来到当时:UITableViewDelegate的那五个代理方法

- tableView:(UITableView *)tableView willDisplayHeaderView:view forSection:(NSInteger)section { if (self.delegate != nil && [self.delegate respondsToSelector:@selector(willDisplayHeaderView:)] != _isScrollUp) { [self.delegate willDisplayHeaderView:section]; } }- tableView:(UITableView *)tableView didEndDisplayingHeaderView:view forSection:(NSInteger)section { if (self.delegate != nil && [self.delegate respondsToSelector:@selector(didEndDisplayingHeaderView:)] && _isScrollUp) { [self.delegate didEndDisplayingHeaderView:section]; }}

UITableViewDelegate的那多个代理方法中,第4个点子是当headerView快要展现时调用。第二个措施是当headerView利落呈现时调用。在那间大家依据_isScrollUp的BOOL值,当headerView将在展现的时候证实这时候_isScrollUp为NO,因为此时是向下滑动的。当headerView终结展现的时候证实此时_isScrollUp为YES,因为那时是向上海滑稽剧团动的。那个时候我们调用ProductsDelegate代理方法,在LGJCategoryVC类中落实代理方法:

#pragma mark - ProductsDelegate- willDisplayHeaderView:(NSInteger)section { [self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:section inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];}- didEndDisplayingHeaderView:(NSInteger)section { [self.categoryTableView selectRowAtIndexPath:[NSIndexPath indexPathForRow:section + 1 inSection:0] animated:YES scrollPosition:UITableViewScrollPositionMiddle];}

willDisplayHeaderView其一代理方法中,侧面tableView向下滑动,这时headerView快要展现,侧边cell选择indexPathForRow:section,在didEndDisplayingHeaderView代理方法中,侧边tableView腾飞滑动,那时headerView告竣展现,左侧cell选择indexPathForRow:section+1

图片 2screenShot.png

先上图:

总结

骨干的大要思路正是上面这么些,大概老是左边手tableView右边tableView的看起来有些绕了,具体的只怕看代码吧。最终贴上代码链接:

和煦入手用Object-C和Swift三种语言各写了多少个大约的小demo,下边先说一下用Object-C达成的大约原理.

[图形上传退步...(image-e5c7d1-1513741413430State of Qatar]

文化互补=====>

因为在此个效果完成的历程中自己遇上一些有关tableView的contentInset和contentOffset的烦闷,所以在此本身想先说北魏楚关于这四个属性,然后再谈怎么样贯彻大家须求的成效。

功能必要(两点卡塔尔国:

本文由乐虎游戏发布于计算机资讯,转载请注明出处:iOS 实现NavigationController的titleView动态缩放效果

关键词:

【LX豪彩】UIProgressView进程条的性格介绍

- viewDidLoad { - (void)viewDidLoad { [super viewDidLoad]; //实例化一个进度条,有两种样式,一种是UIProgressViewStyleBar一种是UIPro...

详细>>

浅谈常见的Loading进度条动效形式

在浏览网页、玩游戏、手提式有线电话机接受等气象,因为网速慢或是硬件差的关联,难免会遇上等候加载的场所,...

详细>>

iOS动漫之自定义转场动漫(push卡塔尔国

push.gif iOS7 开始苹果推出了自定义转场的 API 。从此,任何可以用 CoreAnimation实现的动画,都可以出现在两个 ViewContr...

详细>>

iOS[QuartzCore框架]CADisplayLink篇

在学习CoreAnimation的时候,发现好多地方都用到了CADisplayLink,现在就整理下自己的笔记吧,不足之处敬请指正。===...

详细>>