iOS开发-UITableView滑动视差

视差滚动是指让多层背景以不同的速度移动,形成立体的运动效果,在Web上应用的比较多,App中倒是见的相对比较少,主要在UITableView中的应用的比较多,尤其是当整个UITableViewCell的背景是图片的时候,描述内容较少,滑动视差可以增强视觉效果,可以考虑使用,先来简单的看一下效果:

实现起来也比较简单,UITableView定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#pragma mark - UITablViewDataSource
-(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
     return  1;
}
 
-(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
     return  [self.dataSource count];
}
 
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
     MainTableViewCell *mainCell=[tableView dequeueReusableCellWithIdentifier:CELLIDENTIFIER forIndexPath:indexPath];
     NSString *desc=[NSString stringWithFormat: @"FlyElephant-%ld" ,indexPath.row];
     [mainCell setBackImage:self.dataSource[indexPath.row] description:desc];
     return  mainCell;
}
#pragma mark - UITableViewDelegate
-(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
     return  150;
}

滑动的时候修改单元格偏移量:

1
2
3
4
5
6
7
8
9
10
#pragma mark - UIScrollViewDelegate
-( void )scrollViewDidScroll:(UIScrollView *)scrollView{
     CGPoint offset=self.tableView.contentOffset;
     for  (MainTableViewCell *cell  in  self.tableView.visibleCells) {
         //方式1
//        [cell setImagOffset:offset tableView:self.tableView];
         //方式2
         [cell setAdjustOffset:(cell.frame.origin.y-offset.y)];
     }
}

 MainTableViewCell定义:

1
2
3
4
5
6
7
8
9
10
11
@ interface  MainTableViewCell : UITableViewCell
 
-( void )setBackImage:(NSString *)imageName description:(NSString *)desc;
 
//视差滑动方式1
-( void )setImagOffset:(CGPoint)contentOffset tableView:(UITableView *)tablView;
 
//视差滑动方式2
-( void )setAdjustOffset:(CGFloat)offset;
 
@end

滑动视差调用方式:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
-( void )setImagOffset:(CGPoint)contentOffset tableView:(UITableView *)tablView{
     //偏移量
     CGFloat cellOffset = self.frame.origin.y - contentOffset.y;
     // 偏移量+单元格高度/tableview高度+单元格高度
     CGFloat percent = (cellOffset+self.frame.size.height)/(tablView.frame.size.height+self.frame.size.height);
     //偏移比例(0-1)
     CGFloat extraHeight = self.frame.size.height*OFFSET_RATE;
 
     CGRect frame=self.backImageView.frame;
     frame.origin.y=extraHeight*percent;
     self.backImageView.frame=frame;
}
 
-( void )setAdjustOffset:(CGFloat)offset{
     CGRect frame = self.backImageView.frame;
     frame.origin.y = (offset / 15.0);
     self.backImageView.frame = frame;
}

实现起来比较简单,网上有各种各样的版本,这两种的方式算是最简单的实现~


本文转自Fly_Elephant博客园博客,原文链接:http://www.cnblogs.com/xiaofeixiang/p/5152828.html,如需转载请自行联系原作者

优秀的个人博客,低调大师

微信关注我们

原文链接:https://yq.aliyun.com/articles/362286

转载内容版权归作者及来源网站所有!

低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。

相关文章

发表评论

资源下载

更多资源
优质分享Android(本站安卓app)

优质分享Android(本站安卓app)

近一个月的开发和优化,本站点的第一个app全新上线。该app采用极致压缩,本体才4.36MB。系统里面做了大量数据访问、缓存优化。方便用户在手机上查看文章。后续会推出HarmonyOS的适配版本。

Mario,低调大师唯一一个Java游戏作品

Mario,低调大师唯一一个Java游戏作品

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS

Oracle Database,又名Oracle RDBMS,或简称Oracle。是甲骨文公司的一款关系数据库管理系统。它是在数据库领域一直处于领先地位的产品。可以说Oracle数据库系统是目前世界上流行的关系数据库管理系统,系统可移植性好、使用方便、功能强,适用于各类大、中、小、微机环境。它是一种高效率、可靠性好的、适应高吞吐量的数据库方案。

Eclipse(集成开发环境)

Eclipse(集成开发环境)

Eclipse 是一个开放源代码的、基于Java的可扩展开发平台。就其本身而言,它只是一个框架和一组服务,用于通过插件组件构建开发环境。幸运的是,Eclipse 附带了一个标准的插件集,包括Java开发工具(Java Development Kit,JDK)。