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 与杜比视界

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

2026/8/18 13:27:18 阅读更多 →
Spring Boot MyBatis配置Druid多数据源

Spring Boot MyBatis配置Druid多数据源

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

2026/8/18 13:27:18 阅读更多 →
linux内核原理-原子变量,自旋锁,互斥锁/信号量

linux内核原理-原子变量,自旋锁,互斥锁/信号量

1.原子变量 针对数值类型基础的算术运算&#xff0c;提供的一种保证运算原子性机制&#xff0e; (1). 要求 a. 必须针对atomic_t类型 b. 必须采用提供的原子方法实现基础算术运算原子性 (2). 原理 typedef struct { volatile int counter; } atomic_t;通过volatile使得每次访问…

2026/8/18 13:26:17 阅读更多 →

最新新闻

免费岛屿设计工具Happy Island Designer快速上手:5分钟开始规划你的动物森友会小岛

免费岛屿设计工具Happy Island Designer快速上手:5分钟开始规划你的动物森友会小岛

免费岛屿设计工具Happy Island Designer快速上手&#xff1a;5分钟开始规划你的动物森友会小岛 【免费下载链接】HappyIslandDesigner "Happy Island Designer (Alpha)"&#xff0c;是一个在线工具&#xff0c;它允许用户设计和定制自己的岛屿。这个工具是受游戏《动…

2026/8/18 13:59:40 阅读更多 →
魔兽争霸3兼容性优化完整指南:WarcraftHelper 免费解锁宽屏、地图大小与高帧率

魔兽争霸3兼容性优化完整指南:WarcraftHelper 免费解锁宽屏、地图大小与高帧率

魔兽争霸3兼容性优化完整指南&#xff1a;WarcraftHelper 免费解锁宽屏、地图大小与高帧率 【免费下载链接】WarcraftHelper Warcraft III Helper , support 1.20e, 1.24e, 1.26a, 1.27a, 1.27b 项目地址: https://gitcode.com/gh_mirrors/wa/WarcraftHelper 你的魔兽争…

2026/8/18 13:59:40 阅读更多 →
ChatGPT、Codex实战:为什么AI越来越强,但你的效率提升却开始变慢?

ChatGPT、Codex实战:为什么AI越来越强,但你的效率提升却开始变慢?

很多开发者都有一个奇怪的感觉&#xff1a;几个月前开始使用Codex以后&#xff0c;效率明显提升。以前需要半天的工作&#xff0c;现在几十分钟完成。但是随着AI越来越强&#xff0c;使用越来越深入&#xff0c;新的问题出现&#xff1a;“为什么我的AI能力提高了&#xff0c;但…

2026/8/18 13:59:40 阅读更多 →
LRCGET 上手指南:三步完成歌词批量下载,给本地音乐库一次性补齐同步歌词

LRCGET 上手指南:三步完成歌词批量下载,给本地音乐库一次性补齐同步歌词

LRCGET 上手指南&#xff1a;三步完成歌词批量下载&#xff0c;给本地音乐库一次性补齐同步歌词 【免费下载链接】lrcget Utility for mass-downloading LRC synced lyrics for your offline music library. 项目地址: https://gitcode.com/gh_mirrors/lr/lrcget 你的本…

2026/8/18 13:59:40 阅读更多 →
Minecraft存档修复完整指南:用Region Fixer快速救回损坏的区域文件

Minecraft存档修复完整指南:用Region Fixer快速救回损坏的区域文件

Minecraft存档修复完整指南&#xff1a;用Region Fixer快速救回损坏的区域文件 【免费下载链接】Minecraft-Region-Fixer Python script to fix some of the problems of the Minecraft save files (region files, *.mca). 项目地址: https://gitcode.com/gh_mirrors/mi/Mine…

2026/8/18 13:59:40 阅读更多 →
osu-droid难度星数怎么算?PP与难度计算原理通俗解读

osu-droid难度星数怎么算?PP与难度计算原理通俗解读

osu-droid难度星数怎么算&#xff1f;PP与难度计算原理通俗解读 【免费下载链接】osu-droid 项目地址: https://gitcode.com/gh_mirrors/os/osu-droid 很多刚接触 osu-droid 的玩家都会好奇&#xff1a;osu-droid难度星数是怎么来的&#xff1f;为什么同样节奏的谱面&a…

2026/8/18 13:58:40 阅读更多 →

日新闻

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图:用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF

告别逐帧截图&#xff1a;用 extract-video-ppt 快速提取视频中的 PPT 并一键导出 PDF 【免费下载链接】extract-video-ppt extract the ppt in the video 项目地址: https://gitcode.com/gh_mirrors/ex/extract-video-ppt 如果你还停留在"看网课 不停暂停 截图 …

2026/8/18 0:00:57 阅读更多 →
思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手:7个字重免费商用,从下载到上线的完整走查

思源宋体TTF一站式上手&#xff1a;7个字重免费商用&#xff0c;从下载到上线的完整走查 【免费下载链接】source-han-serif-ttf Source Han Serif TTF 项目地址: https://gitcode.com/gh_mirrors/so/source-han-serif-ttf 你是不是也经历过这种时刻&#xff1a;设计稿里…

2026/8/18 0:00:58 阅读更多 →
华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南:GHelper 如何用一个 10MB 文件替代 Armoury Crate

华硕笔记本控制权回收指南&#xff1a;GHelper 如何用一个 10MB 文件替代 Armoury Crate 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, …

2026/8/18 0:00:59 阅读更多 →

周新闻

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

基于阿里云与通义千问(Qwen)构建AI应用:从模型调用到生产部署的完整实践指南

如果你是一名开发者&#xff0c;最近可能已经感受到了AI大模型正在从“玩具”变成“生产力工具”的强烈信号。从代码补全到智能Agent&#xff0c;从本地部署到云端API&#xff0c;我们正处在一个技术栈快速重构的节点。然而&#xff0c;面对层出不穷的模型、框架和工具&#xf…

2026/8/18 9:15:35 阅读更多 →
工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

工业通信系统底层逻辑:04 反射——高频能量撞墙之后会发生什么?

第四篇:反射——高频能量撞墙之后会发生什么? —— 你以为信号已经过去了,其实它正在回来打你 老Q的现场笔记 第五季,我们正式进入工业神经系统层。这里不再是单个设备的战斗,而是整个工厂“经脉”层面的秩序之战。从这一篇开始,你将第一次看清:看似简单的信号传播,背…

2026/8/18 9:06:28 阅读更多 →
【文章复现】非线性值迭代自适应动态规划(ADP):离散时间非线性系统的策略迭代自适应动态规划算法研究附Matlab代码

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

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

2026/8/18 9:04:56 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速&#xff1a;macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/17 18:54:37 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南&#xff1a;3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗&#xff1f;ncmdump解密工具帮你轻松解决这个困…

2026/8/17 18:55:16 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片&#xff1a;为英语学习 App 打造桌面级学习助手适用平台&#xff1a;HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0&#xff08;API 26 Beta&#xff09;新增了 AgentCard 智能体卡片能力&#xff0c;这是继 HMAF&#xff08;鸿蒙智能体框架&#x…

2026/8/17 18:55:55 阅读更多 →