iOS TableView滚动时的视觉差效果

前言:


这个TableView滚动的视觉差效果实现起来比较简单, 又非常实用, 可以拿到项目中使用, licecap制作的GIF动图失帧比较严重, 所以建议大家下载下来到手机或者模拟器上运行效果会更好!


GitHub下载地址 - LRPerceivedErrorEffect


效果:


当滚动tableView时候,cell中的图片也会随着滚动而滚动,从而体现出双滚动效果,也就是视觉差效果。


视觉差效果的实现


首先我们要自定义一个Cell


在LRPerceivedErrorCell.h中我们需要加一些方法, 在Xib添加一个UIImageView拖线到.h中:


#import <UIKit/UIKit.h>@interface LRPerceivedErrorCell : UITableViewCell/** *  背景图片 */@property (weak, nonatomic) IBOutlet UIImageView *backgroundImage;/** *  Xib创建Cell */+ (instancetype)perceicedErrorCellFromXib:(UITableView *)tableView;/** *  背景图片y值设置 */- (void)cellOnTableView:(UITableView *)tableView didScrollView:(UIView *)view;@end


接下来我们重点来实现- (void)cellOnTableView:(UITableView *)tableView didScrollView:(UIView *)view;这个方法:


- (void)cellOnTableView:(UITableView *)tableView didScrollView:(UIView *)view {    // 将cell的frame转换成view的Frame(为了获取每个cell的Y值)    CGRect rect = [tableView convertRect:self.frame toView:view];    //所看到的每个CellY值(实时获取滚动的值)    //以屏幕中心点为0点 获取能看到的每个Cell离中心点得值是多少    float distanceCenter = CGRectGetHeight(view.frame)/2 - CGRectGetMinY(rect);    // 获取图片超出cell高度部分,图片肯定要比cell大,否则不会有视觉差效果    float difference = CGRectGetHeight(self.backgroundImage.frame) - CGRectGetHeight(self.frame);    float imageMove = (distanceCenter / CGRectGetHeight(view.frame)) * difference;    //旧的图片Frame    CGRect imageRect = self.backgroundImage.frame;    //移动    imageRect.origin.y = imageMove - (difference/2);    //新的图片Frame    self.backgroundImage.frame = imageRect; }


这个方法实现完成之后,我们开始在ViewController使用:


首先实现<UIScrollViewDelegate>协议中的- (void)scrollViewDidScroll:(UIScrollView *)scrollView;代理方法如下:


//滚动监听- (void)scrollViewDidScroll:(UIScrollView *)scrollView {    // 获取表视图的可见单元格。(可见的视图)    NSArray *visibleCells = [self.perceivedErrorTableView visibleCells];    for (LRPerceivedErrorCell *cell in visibleCells) {        //可见视图设置->背景图片y值        [cell cellOnTableView:self.perceivedErrorTableView didScrollView:self.view];    } }


为了调整图片的初始值, 我们需要在视图加载完调用一次scrollViewDidScroll方法:


//视图加载完调用scrollViewDidScroll方法- (void)viewDidAppear:(BOOL)animated {    [super viewDidAppear:animated];    [self scrollViewDidScroll:[[UIScrollView alloc]init]]; }


UITableView的实现我就不多解释了, tableView的一些细节属性设置大家可以下载源码看一下, 非常简单!


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值