IOS 类似于网易新闻首页新闻轮播的组件
一、需求分析
1、可横向循环滚动新闻图片
2、滚动到对应图片时显示新闻标题
3、每张新闻图片可点击
4、有pageControl提示
5、具有控件的扩展能力
二、设计实现
1、显示图片使用SDWebImage第三方库,可缓存图片、通过url异步加载图片
2、使用一个横向滚动的UITableView实现循环滚动
3、使用一个黑色半透明的背景、白色文字的UILabel显示标题
4、定义每个新闻的数据结构:
/** @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、代理协议:
@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)关键代码:
- (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
IOS 类似于网易新闻首页新闻轮播的组件的更多相关文章
- iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView
iOS:实现图片的无限轮播(二)---之使用第三方库SDCycleScrollView 时间:2016-01-19 19:13:43 阅读:630 评论:0 收藏:0 ...
- js实现淘宝首页图片轮播效果
原文:http://ce.sysu.edu.cn/hope2008/Education/ShowArticle.asp?ArticleID=10585 <!DOCTYPE html> &l ...
- Flutter实战视频-移动电商-10.首页_FlutterSwiper轮播效果制作
10.首页_FlutterSwiper轮播效果制作 博客地址: https://jspang.com/post/FlutterShop.html#toc-5c2 flutter_swiper http ...
- 原生JS面向对象思想封装轮播图组件
原生JS面向对象思想封装轮播图组件 在前端页面开发过程中,页面中的轮播图特效很常见,因此我就想封装一个自己的原生JS的轮播图组件.有了这个需求就开始着手准备了,代码当然是以简洁为目标,轮播图的各个功能 ...
- reactjs-swiper react轮播图组件基于swiper
react轮播图组件基于swiper demo地址:http://reactjs-ui.github.io/reactjs-swiper/simple.html 1. 下载安装 npm install ...
- 03 uni-app框架学习:轮播图组件的使用
1.轮播图组件的使用 参照官方文档 2.在页面上加入这个组件 3.在页面中引去css样式 并编写样式 ps:upx单位是什么 简单来说 就相当于小程序中的rpx 是一个自适应的单位 会根据屏幕宽度自动 ...
- Vue2 轮播图组件 slide组件
Vue2原生始轮播图组件,支持宽度自适应.高度设置.轮播时间设置.左右箭头按钮控制,圆点按钮切换,以及箭头.圆点按钮是否显示. <v-carousel :slideData="slid ...
- vue移动音乐app开发学习(三):轮播图组件的开发
本系列文章是为了记录学习中的知识点,便于后期自己观看.如果有需要的同学请登录慕课网,找到Vue 2.0 高级实战-开发移动端音乐WebApp进行观看,传送门. 完成后的页面状态以及项目结构如下: 一: ...
- taro 自定义 轮播图组件
1.代码 components/MySwiper/index.js /** * 轮播图组件 */ import Taro, { Component } from '@tarojs/taro'; imp ...
- 使用原生js将轮播图组件化
代码地址如下:http://www.demodashi.com/demo/11316.html 这是一个轮播图组件,这里是代码地址,需要传入容器的id和图片地址,支持Internet Explor ...
随机推荐
- js ajax 调试
谷歌浏览器 F12->network->()请求ajax)->出现ajax调用的方法名-->点击查看网站请求地址--返回所有的数据(preview面板中) success返回后 ...
- visual studio 中将选中代码相同的代码的颜色设置,修改高亮颜色
这是一个很实用的功能,默认的设置里不是很明显,设置完之后效果图如下: 具体设置方法是: 1. 菜单:工具 -> 选项 ->环境 ->字体和颜色 2. 在右边的 "显示 ...
- SQL总结之导入导出
(5)还原数据库[倒库] [数据泵模式]先要在D盘创建个目录,如D:/dbback 然后去plsql中创建目录sql命令:create directory dbback as 'D:\dbback'; ...
- 工具-maya2014软件操作细节(持续更新……)
整体 ------------------------------------------------------- [全选控制器] 1.选中总控-显示-隔离选择-查看选定对象 2.全选并创建新层(不 ...
- ionic for mac 新建与调试
ionic官网:http://ionicframework.com/ 首先需要下载node.js,建议node管理方式请先详细查看林一篇博客http://www.cnblogs.com/minyc/p ...
- 关于wkwebview
一.引入库 #import <WebKit/WebKit.h> 二.初始化有两种方式 // 默认初始化 - (instancetype)initWithFrame:(CGRect)fram ...
- Web前端优质学习网站
* 官方: W3C:http://www.w3.org/ ECMA:http://www.ecmascript.org/ Mozilla:h ...
- Web 开发后端缓存思路
数据写入缓存: 在数据库与服务端之间利用 redis 这是一个很常见的场景.比如文章的浏览数,每次文章被浏览时,浏览数都 +1.如果每次都回写数据库,不免数据量太大.加上数据库看似简单,其实做了不少关 ...
- chd校内选拔赛题目+题解
题目链接 A. Currency System in Geraldion 有1时,所有大于等于1的数都可由1组成.没有1时,最小不幸的数就是1. #include<iostream> ...
- 7.MyBatis延时加载
1.创建javaWeb项目MyBatis_Lazy并在WebRoot下的WEB-INF下的lib下添加如下jar文件 cglib-nodep-2.1_3.jar log4j-1.2.17.jar my ...