博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
使用UITableView实现图片视差效果
阅读量:5905 次
发布时间:2019-06-19

本文共 8971 字,大约阅读时间需要 29 分钟。

使用UITableView实现图片视差效果

视差效果如下:

 

原理:

根据偏移量计算不同的移动速度,so easy!

////  RootTableViewController.h//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface RootTableViewController : UITableViewController@end
////  RootTableViewController.m//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootTableViewController.h"#import "ImageCell.h"#import "UIImage+ImageEffects.h"#import "FrameAccessor.h"#define IMAGE         [UIImage imageNamed:@"girl"]#define IMAGE_HEIGHT  [IMAGE scaleWithFixedWidth:320.f].size.height@interface RootTableViewController ()
@property (nonatomic, strong) ImageCell *showImageCell;@property (nonatomic, strong) UIImage *rootImage;@end@implementation RootTableViewController- (void)viewDidLoad{ [super viewDidLoad]; _rootImage = [IMAGE scaleWithFixedWidth:320.f];}#pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ // Return the number of sections. return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ // Return the number of rows in the section. return 10;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row == 0) { static NSString *reusedLableImage = @"Image"; ImageCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedLableImage]; if (cell == nil) { cell = [[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedLableImage]; } _showImageCell = cell; cell.showImageView.image = _rootImage; cell.showImageView.viewSize = _rootImage.size; return cell; } else { static NSString *reusedLableOne = @"Normal"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedLableOne]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedLableOne]; cell.backgroundColor = [UIColor whiteColor]; cell.textLabel.text = @"YouXianMing"; cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f]; } return cell; }}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // 返回图片高度 if (indexPath.row == 0) { return [IMAGE scaleWithFixedWidth:320.f].size.height; } return 70;}- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ // 防止出现bug if (scrollView.contentOffset.y <= 0) { _showImageCell.layer.masksToBounds = NO; } else { _showImageCell.layer.masksToBounds = YES; } // 计算偏移量 _showImageCell.showImageView.y \ = calculateSlope(0, 0, 200, 100)*scrollView.contentOffset.y + calculateConstant(0, 0, 200, 100);}CGFloat calculateSlope(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2){ return (y2 - y1) / (x2 - x1);}CGFloat calculateConstant(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2){ return (y1*(x2 - x1) - x1*(y2 - y1)) / (x2 - x1);}@end
////  ImageCell.h//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface ImageCell : UITableViewCell@property (nonatomic, strong) UIImageView *showImageView;@end
////  ImageCell.m//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "ImageCell.h"#import "FrameAccessor.h"@implementation ImageCell- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self)    {        _showImageView = [[UIImageView alloc] init];        _showImageView.frame = (CGRect){CGPointZero, CGSizeZero};        [self addSubview:_showImageView];    }    return self;}@end

好吧,止足于这种效果的话就太简单了,来点复杂的:)

////  RootTableViewController.h//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface RootTableViewController : UITableViewController@end
////  RootTableViewController.m//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "RootTableViewController.h"#import "ImageCell.h"#import "UIImage+ImageEffects.h"#import "FrameAccessor.h"#define IMAGE         [UIImage imageNamed:@"girl"]#define IMAGE_HEIGHT  [IMAGE scaleWithFixedWidth:320.f].size.height@interface RootTableViewController ()
@property (nonatomic, strong) ImageCell *showImageCell;@property (nonatomic, strong) UIImage *rootImage;@property (nonatomic, strong) UIImage *rootBlurImage;@end@implementation RootTableViewController- (void)viewDidLoad{ [super viewDidLoad]; _rootImage = [IMAGE scaleWithFixedWidth:320.f]; _rootBlurImage = [[IMAGE scaleWithFixedWidth:320.f] grayScale];}#pragma mark - Table view data source- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{ // Return the number of sections. return 1;}- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{ // Return the number of rows in the section. return 10;}- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{ if (indexPath.row == 0) { static NSString *reusedLableImage = @"Image"; ImageCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedLableImage]; if (cell == nil) { cell = [[ImageCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedLableImage]; } _showImageCell = cell; cell.showImageView.image = _rootImage; cell.showImageView.viewSize = _rootImage.size; cell.showBlurImageView.image = _rootBlurImage; cell.showBlurImageView.viewSize = _rootBlurImage.size; return cell; } else { static NSString *reusedLableOne = @"Normal"; UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:reusedLableOne]; if (cell == nil) { cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:reusedLableOne]; cell.backgroundColor = [UIColor whiteColor]; cell.textLabel.text = @"YouXianMing"; cell.textLabel.font = [UIFont fontWithName:@"HelveticaNeue-Thin" size:20.f]; } return cell; }}- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{ // 返回图片高度 if (indexPath.row == 0) { return [IMAGE scaleWithFixedWidth:320.f].size.height; } return 70;}- (void)scrollViewDidScroll:(UIScrollView *)scrollView{ // 防止出现bug if (scrollView.contentOffset.y <= 0) { _showImageCell.layer.masksToBounds = NO; } else { _showImageCell.layer.masksToBounds = YES; } // 计算偏移量 _showImageCell.showImageView.y \ = calculateSlope(0, 0, 200, 100)*scrollView.contentOffset.y + calculateConstant(0, 0, 200, 100); // 计算偏移量 _showImageCell.showBlurImageView.y \ = calculateSlope(0, 0, 200, 100)*scrollView.contentOffset.y + calculateConstant(0, 0, 200, 100); // 计算偏移量 _showImageCell.showBlurImageView.alpha \ = calculateSlope(0, 0, 200, 1)*scrollView.contentOffset.y + calculateConstant(0, 0, 200, 1);}CGFloat calculateSlope(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2){ return (y2 - y1) / (x2 - x1);}CGFloat calculateConstant(CGFloat x1, CGFloat y1, CGFloat x2, CGFloat y2){ return (y1*(x2 - x1) - x1*(y2 - y1)) / (x2 - x1);}@end
////  ImageCell.h//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import 
@interface ImageCell : UITableViewCell@property (nonatomic, strong) UIImageView *showImageView;@property (nonatomic, strong) UIImageView *showBlurImageView;@end
////  ImageCell.m//  TableView////  Copyright (c) 2014年 Y.X. All rights reserved.//#import "ImageCell.h"#import "FrameAccessor.h"@implementation ImageCell- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier{    self = [super initWithStyle:style reuseIdentifier:reuseIdentifier];    if (self)    {        _showImageView = [[UIImageView alloc] init];        _showImageView.frame = (CGRect){CGPointZero, CGSizeZero};        [self addSubview:_showImageView];                _showBlurImageView = [[UIImageView alloc] init];        _showBlurImageView.frame = (CGRect){CGPointZero, CGSizeZero};        _showBlurImageView.alpha = 0.f;        [self addSubview:_showBlurImageView];    }    return self;}@end

就是这么简单:)

 

 

 

转载地址:http://medpx.baihongyu.com/

你可能感兴趣的文章
Developing a Service Provider using Java API(Service Provider Interface)(转)
查看>>
oschina程序开发
查看>>
“正在注册字体”问题解决
查看>>
iOS开发-OpenGL ES入门教程1
查看>>
Java 设计模式专栏
查看>>
使用ASP.NET Atlas SortBehavior实现客户端排序
查看>>
图像滤镜处理算法:灰度、黑白、底片、浮雕
查看>>
Office文档出错的几种原因与解决方法
查看>>
正则表达式 学习笔记1.1
查看>>
AssetBundle进阶内存优化(Unity 4.x)
查看>>
《从零开始学Swift》学习笔记(Day 40)——析构函数
查看>>
Exchange2003-2010迁移系列之十,Exchange证书攻略
查看>>
extmail集群的邮件负载均衡方案 [lvs dns postfix]
查看>>
更改UIView的背景
查看>>
APUE第15章学习扎记之程序的存储区布局试验
查看>>
ubuntu升级16.04 inter idea 中文输入法无效
查看>>
三目运算判断jsp脚本里面的值
查看>>
sshtunnel在本地访问云服务器mysql
查看>>
小蚂蚁学习APP接口开发(1)—— json方式封装通信接口
查看>>
我的友情链接
查看>>