封装分页功能

#import <UIKit/UIKit.h>

@interface LZJPageView : UIView

/** 图片名数据 */

@property (nonatomic, strong) NSArray *imageNames;

+ (instancetype)pageView;

@end



#import "LZJPageView.h"

@interface LZJPageView () <UIScrollViewDelegate>

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView;

@property (weak, nonatomic) IBOutlet UIPageControl *pageControl;

/** 定时器 */

@property (nonatomic, weak) NSTimer *timer;

@end

@implementation LZJPageView

- (void)awakeFromNib

{

// 1.单页的时候是否隐藏pageControl

self.pageControl.hidesForSinglePage = YES;

// 2.设置pageControl的图片

[self.pageControl setValue:[UIImage imageNamed:@"current"] forKeyPath:@"_currentPageImage"];

[self.pageControl setValue:[UIImage imageNamed:@"other"]  forKeyPath: @"_pageImage"];

// 3.开启定时器

[self startTimer];

}

+ (instancetype)pageView

{

return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil]  lastObject];

}

- (void)setImageNames:(NSArray *)imageNames

{

_imageNames = imageNames;

// 0.移除之前添加的

// 让subviews这个数组中每一个对象都执行removeFromSuperview

[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)];

// 1.根据图片名数据创建ImageView添加到scrollView

CGFloat scrollViewW = self.scrollView.frame.size.width;

CGFloat scrollViewH = self.scrollView.frame.size.height;

NSUInteger count = imageNames.count;

for (int i = 0; i < count; i ++) {

UIImageView *imageView = [[UIImageView alloc] init];

imageView.image = [UIImage imageNamed:imageNames[i]];

imageView.frame = CGRectMake(i * scrollViewW, 0, scrollViewW, scrollViewH);

[self.scrollView addSubview:imageView];

}

// 2.设置contentSize

self.scrollView.contentSize = CGSizeMake(count * scrollViewW, 0);

// 3.设置总页数

self.pageControl.numberOfPages = count;

}

#pragma mark - 定时器相关的代码

- (void)startTimer

{

// 返回一个自动执行的定时器对象

self.timer = [NSTimer scheduledTimerWithTimeInterval:2.0 target:self selector:@selector(nextPage:) userInfo:@"123" repeats:YES];

[[NSRunLoop mainRunLoop] addTimer:self.timer forMode:NSRunLoopCommonModes];

}

- (void)stopTimer

{

[self.timer invalidate];

}

/**

*  滚动到下一页

*/

- (void)nextPage:(NSTimer *)timer

{

// 1.计算下一页的页码

NSInteger page = self.pageControl.currentPage + 1;

// 2.超过了最后一页

if ( page == self.imageNames.count) {

page = 0;

}

// 3.滚动到下一页

[self.scrollView setContentOffset:CGPointMake(page * self.scrollView.frame.size.width, 0) animated:YES];

}

#pragma mark - UIScrollViewDelegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView

{

// 1.计算页码

int page = (int)(scrollView.contentOffset.x / scrollView.frame.size.width + 0.5);

// 2.设置页码

self.pageControl.currentPage = page;

}

/**

*  用户即将开始拖拽scrollView时,停止定时器

*/

- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

[self stopTimer];

}

/**

*  用户已经停止拖拽scrollView时,开启定时器

*/

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{

[self startTimer];

}

@end

时间: 2024-08-06 20:03:52

封装分页功能的相关文章

简单封装分页功能pageView.js

分页是一个很简单,通用的功能.作为一个有经验的前端开发人员,有义务把代码中类似这样公共的基础性的东西抽象出来,一来是改善代码的整体质量,更重要的是为了将来做类似的功能或者类似的项目,能减少不必要的重复工作量.在实际项目中,尤其是网站类型的项目中,分页部分的设计总是个性化比较强,基本上都不会长的一样,所以可能之前抽象出来的东西,如果写的不够灵活的话,对这些个性化强的项目来说,可能直接应用的时候也得做些调整才行.本文尝试提供一个尽量满足这两方面要求的分页组件. 先介绍下写这个东西的背景:一直以来,我

Yii2.0实用功能技巧解密之——分页功能

Yii中的分页功能主要由yii\web: Linkable接口.yii\widgets: LinkPager类和yii\data: Pagination类三个组成. yii\data: Pagination 主要功能是对分页中的参数进行设置,如当前页.每页大小.总页数,总记录数等. yii\widgets: LinkPager 主要是根据yii\data: Pagination类所提供的参数生成前台页面的分页html代码. 使用:先在action里面生成分页对象,然后在前台的LinkPager中

网页分页功能的实现

最近在学习JavaWeb的时候,用到了分页功能,现在进行一个记录,以备不时之需 第一步:先完成分页Bean的编写. 就是对当前页数,每页显示的记录数,总记录数,总页数,分页显示的信息进行封装.作为通用的分页功能的实现,这里用到了泛型 import java.util.List; /** * 分页封装 * */ public class PageBean<T> { private int currPage;//当前页数 private int pageSize;//每页显示记录数 private

利用PHP访问数据库——实现分页功能与多条件查询功能

1.实现分页功能 <body><table width="100%" border="1">  <thead>    <tr>      <th>代号</th>      <th>名称</th>      <th>价格</th>    </tr>  </thead>  <tbody>      <?php 

JDBC使用数据库来完成分页功能

本篇讲诉如何在页面中通过操作数据库来完成数据显示的分页功能.当一个操作数据库进行查询的语句返回的结果集内容如果过多,那么内存极有可能溢出,所以在大数据的情况下分页是必须的.当然分页能通过很多种方式来实现,而这里我们采用的是操作数据库的方式,而且在这种方式中,最重要的是带限制条件的查询SQL语句: select name from user limit m,n 其中m与n为数字.n代表需要获取多少行的数据项,而m代表从哪开始(以0为起始),例如我们想从user表中先获取前五行数据项(1-5)的na

基于Vue封装分页组件

使用Vue做双向绑定的时候,可能经常会用到分页功能 接下来我们来封装一个分页组件 先定义样式文件 pagination.css ul, li { margin: 0px; padding: 0px;} .page-bar { -webkit-touch-callout: none; -webkit-user-select: none; -khtml-user-select: none; -moz-user-select: none; -ms-user-select: none; user-sel

分页功能的实现——Jdbc &amp;&amp; JSP

@目录 什么是分页 ? 两个子模块功能的问题分析 和 解决方案 有条件查和无条件查询的影响 和 解决方案 项目案例: mysql + commons-dbutils+itcast-tools+BaseServlet + 分页+JSP+JSTL+EL+MVC模式 什么是分页? 如上所示,就是分页  ,不用多说了 子模块功能的问题分析 和 解决方案 @总功能分析  常规JDBC中,点击查询或输入条件查询,在页面中可显示查询出的所有记录,有多少记录就显示多少.在这种项目的基础上增加分页功能 . @分页

angular封装分页组件

1)分页模板页面product_pag.html <div style="margin-right:4px;float:right;"> <span style="color: blue; margin-right: 6px;">总 页 数 <strong class="colorred">{{pageObj.totalPage}}</strong> </span> <span s

【jQuery 分页】jQuery分页功能的实现

自写的jQuery实现分页功能的分页组件: 功能效果如下: 分页组件就是上图中的三部分, 分别放在表格上部  和下部 . 其中, 1>>>页面的代码如下: product.jsp 其中引用bootstrap.css  和bootstrap .js是必须的 1 <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%> 2 <%@ ta