iphone上一种图书翻页效果的实现-- Leaves

iOS翻页动画设计 最近在研究VCTransitionsLibrary,这是一个非常优秀的viewController切换库,使用它可以将传统UInavigationController仅有的pop、push切换动画扩展到翻页、折叠、旋转等等效果。可以直接拿来使用在项目中实现想要的页面切换效果。对于优秀的开源项目,可以拿来使用满足一定的设计需求之外,更重要的是进行分析学习:学习以前没有接触的知识点、学习作者的思路、学习 阅读详情

Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示:
特性
Leaves支持:
文本、图像、PDF等任何可被渲染到Graphics Context上的对象
通过拖动或点击来翻页
支持ipad和iphone大小的显示区域
Levels目前不支持以下特性
页面上的交互元素
轻扫动作
 
类和接口
Leaves中主要有三个类:LevelsView、LevelsViewController、LevelsCache:
LevelsCache:是一个辅助类,用于缓存显示页。它将显示的内容缓存为图片并保存。
LevelsView:是翻页视图,翻页的主要效果便在些实现。它定义了一系列的层对象,并通过操作这些层对象来实现翻页中各种效果。
LevelsViewController: LevelsView的控制器
类似于UITableView, LevelsView也有一个相关的数据源类(LeaveViewDataSource)与委托类(LeavesViewDelegate),它们分别有两个方法,如下所示
复制代码
@protocol LeavesViewDataSource <NSObject>
- (NSUInteger) numberOfPagesInLeavesView:(LeavesView*)leavesView;
- (void) renderPageAtIndex:(NSUInteger)index inContext:(CGContextRef)ctx;
@end
@protocol LeavesViewDelegate <NSObject>
@optional
- (void) leavesView:(LeavesView *)leavesView willTurnToPageAtIndex:(NSUInteger)pageIndex;
- (void) leavesView:(LeavesView *)leavesView didTurnToPageAtIndex:(NSUInteger)pageIndex;
@end
 
层树结构
LevelsView中的层树结构如下图所示:
 
每一个层(Layer)都有其特殊的用途,或作为内容的显示层,或作为阴影层,具体说明如下:
topPage层:显示当前页的内容。
topPageOverlay层:在翻页过程中,该层覆盖于topPage层上,且颜色偏暗,从而使topPage未翻转的部分变暗,有阴影的感觉。
topPageShadow层:在翻页过程中,该层用于表达topPage被翻转部分所形成的阴影。
topPageReverse层:翻页过程中,topPage被翻转部分的反面的容器层。
topPageReverseImage层:反面的内容页。在竖屏下,用于显示topPage被翻转部分的内容,这些内容被映射到该层,给人感觉书是透明的。在横屏下,显示的是下一页的内容。
topPageReverseOverlay层:该层用于覆盖topPageReverse层,效果与topPageOverlay类似。
topPageReverseShading层:该层在topPageReverse层右侧形成一个阴影。
bottomPage层:topPage页的下一页所在的层。
bottomPageShadow层:该层为在翻页过程中在 bottomPage左侧形成的一个阴影层。
leftPage层:该层为横屏模式下左侧页所在的层。
leftPageOverlay层:该层覆盖于为 leftPage层,效果与topPageOverlay类似。
由上可以看出,层树中的层主要分为三类:
内容显示层:topPage、topPageReverseImage、bottomPage、leftPage
阴影层:topPageShadow、topPageReverseShading、bottomPageShadow
覆盖层:topPageOverlay、topPageReverseOverlay、leftPageOverlay

图片缓存
Tow Brow在处理不同的内容(文本、图像、PDF)时显示时,所采取的方法是一样的。他将内容缓存为图像,并显示在屏幕上。基本方法是将内容写进CGContextRef中,然后根据CGContextRef中的信息创建图像,具体方法如下:
复制代码
-(CGImageRef) imageForPageIndex:(NSUInteger)pageIndex {
CGColorSpaceRef colorSpace = CGColorSpaceCreateDeviceRGB(); CGContextRef context = CGBitmapContextCreate(NULL,
pageSize.width,
pageSize.height,
8, /* bits per component*/
pageSize.width * 4, /* bytes per row */
colorSpace,
kCGImageAlphaPremultipliedLast | kCGBitmapByteOrder32Big);
CGColorSpaceRelease(colorSpace);
CGContextClipToRect(context, CGRectMake(0, 0, pageSize.width, pageSize.height));
[dataSource renderPageAtIndex:pageIndex inContext:context];
CGImageRef image = CGBitmapContextCreateImage(context);
CGContextRelease(context);
[UIImage imageWithCGImage:image];
CGImageRelease(image);
return image;
}

当然程序没有缓存所有页的内容,而是根据横竖屏的不同缓存适当数量的内容。每次翻页时会重新整理缓存中的内容。
翻页动画实现
在Leaves中,翻页的基本原理其实很简单:翻页过程中,根据手指的划动来不断的调整层树结构中每个层的frame,翻页结束后,重新调整内容显示层所显示的内容。
为此,LevelsView中设置了一个leafEdge变量,该变量是手指在屏幕上划动时Touch Point在屏幕x轴上的百分比位置,这个操作在touchesMoved:withEvent中完成:
复制代码
- (void)touchesMoved:(NSSet *)touches withEvent:(UIEvent *)event {
......
UITouch *touch = [event.allTouches anyObject];
CGPoint touchPoint = [touch locationInView:self];
[CATransaction begin];
[CATransaction setValue:[NSNumber numberWithFloat:0.07]
forKey:kCATransactionAnimationDuration];
self.leafEdge = touchPoint.x / self.bounds.size.width;
[CATransaction commit];
}

而在leafEdge的set方法中,我们根据leafEdge的值来重新设定各个Layer的frame属性
复制代码
- (void) setLayerFrames {
CGRect rightPageBoundsRect = self.layer.bounds;
CGRect leftHalf, rightHalf;
CGRectDivide(rightPageBoundsRect, &leftHalf, &rightHalf, CGRectGetWidth(rightPageBoundsRect) / 2.0f, CGRectMinXEdge);
if (self.mode == LeavesViewModeFacingPages) {
rightPageBoundsRect = rightHalf;
}
topPage.frame = CGRectMake(rightPageBoundsRect.origin.x,
rightPageBoundsRect.origin.y,
leafEdge * rightPageBoundsRect.size.width,
rightPageBoundsRect.size.height);
topPageReverse.frame = CGRectMake(rightPageBoundsRect.origin.x + (2*leafEdge-1) * rightPageBoundsRect.size.width,
rightPageBoundsRect.origin.y,
(1-leafEdge) * rightPageBoundsRect.size.width,
rightPageBoundsRect.size.height);
......
}

最后便是当手指离开屏幕时,如何处理翻页结果(将当前页翻过去还是没有翻过去)。这个操作在 这个操作在touchesEnded:withEvent中完成
复制代码
- (void)touchesEnded:(NSSet *)touches withEvent:(UIEvent *)event {
......
UITouch *touch = [event.allTouches anyObject];
CGPoint touchPoint = [touch locationInView:self];
BOOL dragged = distance(touchPoint, touchBeganPoint) > [self dragThreshold];
[CATransaction begin];
float duration;
if ((dragged && self.leafEdge < 0.5) || (!dragged && [self touchedNextPage])) {
[self willTurnToPageAtIndex:currentPageIndex + numberOfVisiblePages];
self.leafEdge = 0;
duration = leafEdge;
......
}
else {
[self willTurnToPageAtIndex:currentPageIndex];
self.leafEdge = 1.0;
duration = 1 - leafEdge;
.......
}
[CATransaction setValue:[NSNumber numberWithFloat:duration]
forKey:kCATransactionAnimationDuration];
[CATransaction commit];
}

如果需要在翻页后执行某些操作(如在屏幕上显示当前页数等),则可以在继承自 LevelsViewController的控制器中实现leavesView:didTurnToPageAtIndex方法。
在此需要注意的就是 topPageReverseImage在竖屏时做了如下的变换
复制代码
topPageReverseImage.contentsGravity = kCAGravityRight;
topPageReverseImage.transform = CATransform3DMakeScale(-1, 1, 1);
从而使topPageReverseImage显示的内容让人感觉是透过纸张,看到topPage的内容。
横屏与竖屏
Leaves还有一个特点就是其支持横屏时,能同时看到两页的内容(该效果是由Ole Begemann改进的)。该改进最关键的地方就是增加了leftPage层,同时在横屏显示时将屏幕一分为二,在左侧显示leftPage。同进在翻页的过程中,topPageReverseImage显示的是topPage页下一页的内容。在翻转屏幕时,会根据方向重新调整内容的显示。



2:第二种
给大家介绍一下的源码是ES实现的翻页效果,是目前为止最接近iBook的效果了, 是实时的哟。目前源码是alpha版,开发人员还在继续完善,相信将来可能超越iBook哟,大家敬请关注。介绍: http://api.mutado.com/mobile/paperstack/

原文地址:http://www.cocoachina.com/bbs/read.php?tid=73570&page=13

iOS 常见的翻页效果 立即下载

相关推荐

ios 电子书翻页效果

好东西及时分享

Leaves -- iOS上一种图书翻页效果的实现

    Leaves -- iOS上一种图书翻页效果的实现Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示:特性Leaves支持:文本、图像、PDF等任何可被渲染到Graphics Context上的对象通过拖动或点击来翻页支持ipad和iphone大小的显示区域Levels...

tank2308635的专栏 342

ios 视图切换翻页效果

http://blog.youkuaiyun.com/duxinfeng2010/article/category/1155790 有对代码详细介绍

iOS开发------仿知乎上下滑动切换页面

放松的时候看看知乎,生活不解的时候问问知乎,这貌似已经成为了生活中的一种习惯,它独特翻页方式也是本人喜欢的一个原因,通过上划与下滑进行页面的翻页,不必返回再进入下一个页面,显得非常的简介并且人性化,这里就模拟知乎进行一次模拟滚动换页,希望能给想做这种效果的人一种思路,实现的大体思路就是在ScrollView中嵌套ScrollView来感应达到切换效果。利用工作之余就做了一个类似功能的小Demo,当然

RITL_Y 1万+

ios源码之3D书本翻页效果.rar

ios源码之3D书本翻页效果.rar

伪距单点定位推导+DOP值分析(附matlab仿真代码)

伪距单点定位公式推导、DOP值分析与matlab仿真分析

shannanshouyin的博客 2512

ios动态效果实现翻页_动画:UIKitAnimation 简单动画学习 iOS (一) 渐变 、 移动 、翻页、来回翻转 | 学步园...

转载请说明(谢谢)http://blog.youkuaiyun.com/a21064346/article/details/7851695以下 一个系列的 动画效果 在 UIView.h文件中可以查找。但是比较炫丽的一些动画,就需要用到下一章节的coreAnimation。其中需要添加QuartzCoreCoreGraphics这两个framework本人偷懒,就不搭建框架了。自己把方法复制到m文件里:)//...

weixin_39789042的博客 238

基于PINN的一个简单的求解偏微分方程实例

本人是做化工模拟的一名学生,最近在学习PINN(Physics-Informed Neural Networks,物理信息神经网络)对管道动力学进行建模研究,PINN由于其对机理与数据的良好兼顾性非常热门,本文是作者对PINN入门研究过程的一个练手小题目,main code也是作者代码是基于pytorch2.6.0写的,发上来供各位参考,欢迎研究管道动力学和PINN的小伙伴一起讨论~

weixin_64491760的博客 1740

ios动态效果实现翻页_ios animation 动画效果实现

1.过渡动画 CATransitionCATransition *animation = [CATransition animation];[animation setDuration:1.0];[animation setType:kCATransitionFade];[animation setSubtype:kCATransitionFromLeft];[_imgPic.layer addA...

weixin_35127842的博客 713

金融行业软件测试面试题(含答案)

6、假如发现了一个BUG,跟开发本身没什么关系,涉及到理念,需求问题,如何解决?11、假如要你测试6个月期限的p2p借款产品,你应该怎么设计案例,说出测试点。17、如果京东有一个购物网页给你,你要怎么进行测试?31、我们公司自动化测试用的语言是Java,Java你不会,该怎么办?23、你们测试用的测试环境是谁给的?24、如果领导分配你的任务超出负荷,领导高估了你的能力,怎么办。26、给你一个模块测试,只有一个星期的时间你如何有效率地完成?29、如果你组长的用例写错了,但他认为是对的,你怎么处理?

crhnb的博客 915

VLA、世界模型与端到端在智驾中的本质关系与工程落地

世界模型并非3D重建,而是对环境状态转移函数的可微分建模;VLA不是视觉+语言+动作的简单拼接,核心在于跨模态语义对齐。二者共同支撑具身智能系统实现从感知到行动的闭环推演,其技术价值体现在长尾场景泛化能力提升与决策延迟降低。在自动驾驶领域,真实量产方案均采用VLA架构作为多模态感知基础,嵌入轻量级世界模型以支持反事实轨迹推演,并通过WA硬件封装保障实时性,最终由端到端控制层完成像素到扭矩的语义贯通。这种混合架构已成L2+/L3智驾系统的工程共识。

weixin_34163553的博客 365

iphone阅读模式翻页_Leaves -- iOS上一种图书翻页效果的实现

特性Leaves支持:文本、图像、PDF等任何可被渲染到Graphics Context上的对象通过拖动或点击来翻页支持ipad和iphone大小的显示区域Levels目前不支持以下特性页面上的交互元素轻扫动作类和接口Leaves中主要有三个类:LevelsView、LevelsViewController、LevelsCache:LevelsCache:是一个辅助类,用于缓存显示页。它将显示的内...

weixin_29141505的博客 1447

防护装备穿戴检查:基于YOLOv8与UI界面的深度学习应用

通过结合YOLOv8模型与UI界面,本系统实现了防护装备穿戴检查的自动化。该系统能够快速识别工作人员是否正确佩戴了所需的防护装备,帮助提高安全管理水平。未来,随着技术的发展,防护装备穿戴检查系统将在更多领域得到应用,如工业现场、建筑工地等,实现更加精确和高效的实时监控。

YOLO 354

iOS上一种图书翻页效果的实现(Lea…

Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示:   特性 Leaves支持: 文本、图像、PDF等任何可被渲染到Graphics Context上的对象 通过拖动或点击来翻页 支持ipad和iphone大小的显示区域 Levels目前不支持以下特性 页

u012202641的专栏 1002

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色

ArcGIS JSAPI 高级教程 - 添加多个 box 立方体 - 通过顶点、索引、UV 自定义每个 box、每个面不同颜色。

非科班Java出身GISer的博客 400

71、CAN总线双绞线绞距与抗共模干扰的定量关系

摘要:本文探讨了CAN总线双绞线绞距与抗共模干扰的定量关系。通过理论推导得出共模电压与绞距平方成正比,绞距越小抑制效果越好。工程实践表明,工业现场推荐绞距不超过30mm,高频干扰场景需优先优化绞距。实测数据验证了绞距均匀性的重要性,建议控制在15-25mm范围,安装时保持绞合结构完整。案例显示,将绞距从50mm改为15mm后,共模干扰从12V降至1.8V,有效解决了CAN通信问题。绞距选择需兼顾理论计算与现场实测,同时注意与屏蔽层的协同设计。

2401_88858637的博客 184

Leaves -- iOS上一种图书翻页效果的实现1

Leaves -- iOS上一种图书翻页效果的实现 Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示: 特性 Leaves支持: 文本、图像、PDF等任何可被渲染到Graphics Context上的对象 通过拖动或点击来翻页 支持ipad和iphone大小的显示

Matthew_Chen1008的专栏 426

uni-app 实现高德 / 百度 / 腾讯地图多端导航跳转(H5最全方案)

本文介绍了一套生产级可复用的多地图导航Hook封装方案。针对开发中常见的经纬度顺序混乱、中文乱码、参数不统一等问题,提供了统一解决方案。方案支持高德、百度、腾讯三大地图平台,封装了各平台的URI参数处理逻辑,包括坐标顺序转换、名称编码、导航模式适配等核心功能。通过组合式API设计,开发者只需调用统一入口即可实现多地图导航跳转,同时保留单独调用各平台的能力。文中还总结了6大常见坑点,并推荐默认使用高德地图作为最稳定的导航方案。该方案适用于车辆定位、物流配送等多种业务场景,可封装为可复用的Hooks组件。

专注于前端开发与实战技巧,记录从零到一的学习与项目经验。分享 Vue3 / JavaScript / TypeScript / Flutter /Uniapp等前端技术,以及 性能优化、工程化、最佳实践。 537

iOS上一种图书翻页效果的实现(Leaves)详解_技术成长笔记_新浪博客

Leaves是由TowBrow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示: 特性 Leaves支持: 文本、图像、PDF等任何可被渲染到GraphicsContext上的对象 通过拖动或点击来翻页 支持ipad和iphone大小的显示区域 Levels目前不支持以下...

u010783713的专栏 246

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

iOS上一种图书翻页效果的实现(Leaves)详解

Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示: 特性 Leaves支持: 文本、图像、PDF等任何可被渲染到Graphics Context上的对象 通过拖动或点击来翻页 支持ipad和iphone大小的显示区域 Levels目前不支持以下特性

zaitianaoxiang的专栏 3357

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

IOS 上图书翻页效果的实现

本文由论坛会员德鲁伊分享 Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效 本文由论坛会员德鲁伊分享  Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示:

fans 的专栏 1252

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

iOS 书翻页效果

本文由论坛会员德鲁伊分享 Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效 本文由论坛会员德鲁伊分享  Leaves是由Tow Brow开发的一个简单的图书翻页控件,它巧妙地结合了镜像层、阴影层(用于半透明页)和渐变层(用于阴影)来实现图书的翻页效果。其翻页效果如下图所示:

zaitianaoxiang的专栏 5005
上一篇: Iphone实现简单翻页效果
下一篇: iphone--UIView翻转效果实现
CJsen
博客等级 码龄17年 46粉丝 53原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值