OC 技术 UIPageViewController 小说的翻页效果(源码)

发布时间:2026/8/18 13:27:05

OC 技术 UIPageViewController 小说的翻页效果(源码)
一直觉得自己写的不是技术而是情怀一个个的教程是自己这一路走来的痕迹。靠专业技能的成功是最具可复制性的希望我的这条路能让你们少走弯路希望我能帮你们抹去知识的蒙尘希望我能帮你们理清知识的脉络希望未来技术之巅上有你们也有我。(OC)小说翻页效果,UIPageViewController-代码事例视频解说效果前言整个页面的代码原理就是一个ViewController,上面添加了一个UIPageViewController,然后UIPageViewController上面在加一个ViewController,当手势翻下一页的时候就调用UIPageViewController的datasource返回NextViewController,当手势前下一页的时候就调用UIPageViewController的datasource返回BackViewController,定义属性//翻页控制器property(strong,nonatomic)UIPageViewController*pageViewController;property(strong,nonatomic)NSArray*pageData;//1-12数组 数据源方法//保存当前控制器的目的是为了,翻页的时候,用当前控制器拿到当前的页数,看看是否有下一页或者前一页property(nonatomic,strong)UIViewController*currentViewController;初始化 UIPageViewController初始化 UIPageViewController和数据源self.pageData[1,2,3,4,5,6,7,8,9,10,11,12];self.pageViewController[[UIPageViewController alloc]initWithTransitionStyle:UIPageViewControllerTransitionStylePageCurl navigationOrientation:UIPageViewControllerNavigationOrientationHorizontal options:nil];self.pageViewController.delegateself;self.pageViewController.dataSourceself;self.pageViewController.doubleSidedNO;//用于确定页面是否具有双面显示。将显示前一页和后一页的内容NextViewController*startingViewController[selfviewControllerAtIndex:0];NSArray*viewControllers[startingViewController];[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:NO completion:NULL];[selfaddChildViewController:self.pageViewController];[self.view addSubview:self.pageViewController.view];self.pageViewController.view.frameself.view.bounds;[self.pageViewController didMoveToParentViewController:self];// Add the page view controllers gesture recognizers to the book view controllers view so that the gestures are started more easily.self.view.gestureRecognizersself.pageViewController.gestureRecognizers;实现 UIPageViewController 的代理方法// 该方法用于告诉UIPageViewController在不同设备方向下例如横向或纵向如何设置页面的脊柱spine即两个页面之间的间隔。-(UIPageViewControllerSpineLocation)pageViewController:(UIPageViewController*)pageViewController spineLocationForInterfaceOrientation:(UIInterfaceOrientation)orientation{// 获取当前的视图控制器UIViewController*currentViewControllerself.pageViewController.viewControllers[0];// 将当前视图控制器放入数组中NSArray*viewControllers[currentViewController];// 设置UIPageViewController的视图控制器为当前视图控制器并指定方向为向前带有动画效果[self.pageViewController setViewControllers:viewControllers direction:UIPageViewControllerNavigationDirectionForward animated:YES completion:NULL];// 设置UIPageViewController为双面显示self.pageViewController.doubleSidedYES;// 返回页面脊柱的位置为最小值returnUIPageViewControllerSpineLocationMin;}实现 UIPageViewController 的数据源方法#pragmamark-UIPageViewController dataSource methods// UIPageViewController数据源方法// 前一页-(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerBeforeViewController:(UIViewController*)viewController{// 如果当前页是NextViewController类型if([viewController isKindOfClass:[NextViewController class]]){// 将当前视图控制器设置为当前控制器self.currentViewControllerviewController;// 创建BackViewController实例BackViewController*backViewController[[BackViewController alloc]init];// 更新BackViewController的视图控制器[backViewController updateWithViewController:viewController];returnbackViewController;}// 获取当前页的索引NSUInteger index[selfindexOfViewController:(NextViewController*)_currentViewController];// 如果当前页是第一页或者索引未找到则返回nilif((index0)||(indexNSNotFound)){returnnil;}// 索引减1返回相应索引的视图控制器index--;return[selfviewControllerAtIndex:index];}// 后一页-(UIViewController*)pageViewController:(UIPageViewController*)pageViewController viewControllerAfterViewController:(UIViewController*)viewController{// 如果当前页是NextViewController类型if([viewController isKindOfClass:[NextViewController class]]){// 将当前视图控制器设置为当前控制器self.currentViewControllerviewController;// 创建BackViewController实例BackViewController*backViewController[[BackViewController alloc]init];// 更新BackViewController的视图控制器[backViewController updateWithViewController:viewController];returnbackViewController;}// 获取当前页的索引NSUInteger index[selfindexOfViewController:(NextViewController*)_currentViewController];// 如果索引未找到则返回nilif(indexNSNotFound){returnnil;}// 索引加1index;// 如果索引等于数据源总数则返回nilif(index[self.pageData count]){returnnil;}// 返回相应索引的视图控制器return[selfviewControllerAtIndex:index];}定义两个私有方法传入当前页数,返回当前页数的控制器(包括内容)#pragmamark-私有方法-传入当前页数,返回当前页数的控制器(包括内容)-(NextViewController*)viewControllerAtIndex:(NSUInteger)index{if(([self.pageData count]0)||(index[self.pageData count])){returnnil;}NextViewController*dataViewController[NextViewController new];dataViewController.valueself.pageData[index];returndataViewController;}获取当前控制器的当前页数,用于滑动时判断是否有下一页和前一页#pragmamark-私有方法-获取当前控制器的当前页数,用于滑动时判断是否有下一页和前一页-(NSUInteger)indexOfViewController:(NextViewController*)viewController{return[self.pageData indexOfObject:viewController.value];}前一个控制器里面定义了一个方法,用于图片的内容翻页是的翻页效果-(void)updateWithViewController:(UIViewController*)viewController{self.backgroundImage[selfcaptureView:viewController.view];}// 捕捉指定视图的内容并返回 UIImage 对象-(UIImage*)captureView:(UIView*)view{// 获取视图的边界CGRect rectview.bounds;// 开始一个图形上下文UIGraphicsBeginImageContextWithOptions(rect.size,YES,0.0f);// 获取当前图形上下文CGContextRef contextUIGraphicsGetCurrentContext();// 创建仿射变换用于翻转图像CGAffineTransform transformCGAffineTransformMake(-1.0,0.0,0.0,1.0,rect.size.width,0.0);// 将仿射变换应用于当前图形上下文CGContextConcatCTM(context,transform);// 在当前图形上下文中渲染视图的层[view.layer renderInContext:context];// 从当前图形上下文中获取图像UIImage*imageUIGraphicsGetImageFromCurrentImageContext();// 结束图形上下文UIGraphicsEndImageContext();// 返回捕捉到的图像returnimage;}下一个控制器下一个控制器比较简单里面就一个label现实小说的内容-(void)viewDidLoad{[superviewDidLoad];self.view.backgroundColor[UIColor colorWithRed:241.0/255.0green:243.0/255.0blue:247.0/255.0alpha:1.0];//正页内容例如是一个label文本self.dataLabel[UILabel new];self.dataLabel.textself.value;self.dataLabel.textColor[UIColor blackColor];self.dataLabel.addTo(self.view).fnt(16).makeCons(^{make.center.equal.view(self.view);});}

相关新闻

BBDown 快速上手指南:3 步装好命令行哔哩哔哩下载器,支持 8K 与杜比视界

BBDown 快速上手指南:3 步装好命令行哔哩哔哩下载器,支持 8K 与杜比视界

2026/8/18 13:27:05

BBDown 快速上手指南:3 步装好命令行哔哩哔哩下载器,支持 8K 与杜比视界 【免费下载链接】BBDown Bilibili Downloader. 一个命令行式哔哩哔哩下载器. 项目地址: https://gitcode.com/gh_mirrors/bb/BBDown BBDown 是一个开源的命令行式哔哩哔哩下…

Spring Boot MyBatis配置Druid多数据源

Spring Boot MyBatis配置Druid多数据源

2026/8/18 13:27:05

一、引入依赖 <dependency><groupId>com.oracle</groupId><artifactId>ojdbc6</artifactId><version>6.0</version></dependency><dependency><groupId>mysql</groupId><artifactId>mysql-connector-…

加密音乐文件打不开?一文说清 Unlock Music 免费解锁方法

加密音乐文件打不开?一文说清 Unlock Music 免费解锁方法

2026/8/18 13:17:04

加密音乐文件打不开&#xff1f;一文说清 Unlock Music 免费解锁方法 【免费下载链接】unlock-music 在浏览器中解锁加密的音乐文件。原仓库&#xff1a; 1. https://github.com/unlock-music/unlock-music &#xff1b;2. https://git.unlock-music.dev/um/web 项目地址: ht…

定制化数据后处理软件,能为企业省下多少钱?一笔详细的经营账

定制化数据后处理软件,能为企业省下多少钱?一笔详细的经营账

2026/8/18 14:17:07

测试明明做完了&#xff0c;真正磨人的阶段才刚刚开始。海量原始数据复制粘贴、公式校对、格式转换、图表排版、报告生成……测试工程师宝贵的时间&#xff0c;全耗在了重复劳动里。或许你也想过直接采购一套数据分析软件&#xff0c;但一看功能列表和报价就犹豫了——通用功能…

大气层整合包系统极简部署:一台Switch从正版到全功能折腾机的完整上手笔记

大气层整合包系统极简部署:一台Switch从正版到全功能折腾机的完整上手笔记

2026/8/18 14:17:07

大气层整合包系统极简部署&#xff1a;一台Switch从正版到全功能折腾机的完整上手笔记 【免费下载链接】Atmosphere-stable 大气层整合包系统稳定版 项目地址: https://gitcode.com/gh_mirrors/at/Atmosphere-stable 先把结论放在最前面&#xff1a;如果你手里有一台暂时…

认识 Redis OM Spring:Spring Boot 开发者必知的 Redis 搜索与文档框架

认识 Redis OM Spring:Spring Boot 开发者必知的 Redis 搜索与文档框架

2026/8/18 14:17:07

认识 Redis OM Spring&#xff1a;Spring Boot 开发者必知的 Redis 搜索与文档框架 【免费下载链接】redis-om-spring Spring Data Redis extensions for better search, documents models, and more 项目地址: https://gitcode.com/gh_mirrors/re/redis-om-spring Redi…

告别支付接入的漫漫长路:PayJS Go SDK,免资质个人收款一站式方案

告别支付接入的漫漫长路:PayJS Go SDK,免资质个人收款一站式方案

2026/8/18 14:17:07

告别支付接入的漫漫长路&#xff1a;PayJS Go SDK&#xff0c;免资质个人收款一站式方案 【免费下载链接】payjs 个人支付收款解决方案PayJS的Golang版本SDK 项目地址: https://gitcode.com/gh_mirrors/pa/payjs PayJS Go SDK&#xff08;本项目&#xff09;是面向个人开…

nginx-autoinstall环境变量清单:20+配置项实现无人值守安装

nginx-autoinstall环境变量清单:20+配置项实现无人值守安装

2026/8/18 14:17:07

nginx-autoinstall环境变量清单&#xff1a;20配置项实现无人值守安装 【免费下载链接】nginx-autoinstall Compile NGINX from source with custom modules and patches on Debian and Ubuntu 项目地址: https://gitcode.com/gh_mirrors/ng/nginx-autoinstall nginx-au…

从零做出冒险岛自定义地图:Harepacker地图编辑器手把手入门指南

从零做出冒险岛自定义地图:Harepacker地图编辑器手把手入门指南

2026/8/18 14:07:06

从零做出冒险岛自定义地图&#xff1a;Harepacker地图编辑器手把手入门指南 【免费下载链接】Harepacker-resurrected All in one .wz file/map editor for MapleStory game files 项目地址: https://gitcode.com/gh_mirrors/ha/Harepacker-resurrected 在《冒险岛》里泡…

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

2026/8/17 1:28:42

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

【双层规划,节点出清价,绿证交易,CVaR方法】两级电力市场环境下计及风险的省间交易商最优购电模型附Matlab代码

2026/8/18 1:03:22

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

隐式mpc+自适应mpc+时变mpc,线性时变模型预测控制附Simulink仿真

2026/8/17 8:40:51

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

多智能体大模型辩论中的立场收敛:从伪共识到理性说服的评估方法

2026/8/18 0:06:29

1. 从一场“假辩论”说起&#xff1a;为什么大模型辩论会走向“伪共识”&#xff1f;最近在折腾多智能体大语言模型&#xff08;Multi-Agent LLM&#xff09;的辩论实验&#xff0c;发现一个挺有意思的现象。我让几个基于GPT-4的智能体就一个争议性话题&#xff08;比如“远程办…

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

Frida动态代码插桩框架:从原理到实战的移动安全与逆向工程指南

2026/8/18 0:06:29

1. 从“黑盒”到“白盒”&#xff1a;为什么我们需要Frida在移动安全、逆向工程甚至是一些自动化测试的场景里&#xff0c;我们经常会遇到一个让人头疼的问题&#xff1a;面对一个编译好的、没有源代码的应用程序&#xff0c;我们如何知道它在运行时内部发生了什么&#xff1f;…

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

ECharts饼图中心文字配置指南:从label与title区别到动态交互实现

2026/8/18 0:06:29

1. 从“空心”到“有魂”&#xff1a;为什么要在饼图中间加文字&#xff1f;如果你用过ECharts画饼图&#xff0c;大概率会注意到一个现象&#xff1a;默认生成的饼图中间是空心的。这个设计本身没问题&#xff0c;它清晰地展示了各个扇区的占比关系。但在很多实际的业务场景里…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/17 12:00:53

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具&#xff0c;覆盖选题构思、文献整理、内容生成、格式排版等核心场景&#xff0c;真正帮你高效搞定论文难题。 一、全流程王者&#xff1a;一站式搞定论文全链路&#xff08;一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具&#xff0c;核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测&#xff0c;千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队&#xff0c;覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/18 12:20:24

告别游戏崩溃&#xff1a;XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…