IOS 类似于网易新闻首页新闻轮播的组件
一、需求分析
1、可横向循环滚动新闻图片
2、滚动到对应图片时显示新闻标题
3、每张新闻图片可点击
4、有pageControl提示
5、具有控件的扩展能力
二、设计实现
1、显示图片使用SDWebImage第三方库,可缓存图片、通过url异步加载图片
2、使用一个横向滚动的UITableView实现循环滚动
3、使用一个黑色半透明的背景、白色文字的UILabel显示标题
4、定义每个新闻的数据结构:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | /** @brief 默认使用本地地址,如果本地没有的话,使用网络图片 */ @interface PhotoNewsModel : NSObject /** @brief 加载时展示的图片*/ @property ( nonatomic , strong) UIImage *loadingImage; /** @brief 图片本地的地址 */ @property ( nonatomic , strong) NSString *localPath; /** @brief 新闻图片的地址 */ @property ( nonatomic , strong) NSString *photoUrl; /** @brief 新闻标题 */ @property ( nonatomic , strong) NSString *title; @end |
5、代理协议:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | @protocol UIPhotoNewsViewDelegate < NSObject > /** * 取得多少条图片新闻 * * @param photoNews 控件自身 * * @return 图片新闻的个数 */ - ( NSUInteger )photoNewsCount:(UIPhotoNewsView *)photoNews; /** * 返回第几个图片新闻的model * * @param photoNews 控件自身 * @param index * * @return 返回描述图片新闻的model */ - (PhotoNewsModel *)photoNews:(UIPhotoNewsView *)photoNews photoModelAtIndex:( NSUInteger )index; /** * 图片新闻点击的回调 * * @param photoNews 控件自身 * @param model 点击新闻对应的model */ - ( void )photoNews:(UIPhotoNewsView *)photoNews photoDidClick:(PhotoNewsModel *)model; @end |
6、循环滚动如何实现
a)将要展示的数据复制一份相当于 1、2、3、4|1、2、3、4
b)数据初始化时,定位到第二份的1这里
c)滚动到前面的1或者2时,设置跳转到第二份的1和2
d)关键代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | - ( void )makeCycleScroll { if ( self .realCount >= 2) { CGFloat currentOffsetX = self .contentTableView.contentOffset.x; CGFloat currentOffSetY = self .contentTableView.contentOffset.y; CGFloat contentHeight = self .contentTableView.contentSize.height; if (currentOffSetY < (contentHeight / 8.0)) { self .contentTableView.contentOffset = CGPointMake(currentOffsetX,(currentOffSetY + (contentHeight/2))); } if (currentOffSetY >= ((contentHeight * 6)/ 8.0)) { self .contentTableView.contentOffset = CGPointMake(currentOffsetX,(currentOffSetY - (contentHeight/2))); } } } |
三、实现效果
(可左右循环滚动)
四、代码
http://pan.baidu.com/s/1sjqJsK1 提取码:xvfl
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库