一、xib文件构成

二、自定义控件类(xib文件与自定义控件类的文件名字相同,并且将xib文件中父类控件的类名改成自定义控件类的名称)

***********自定义控件类需要的属性*************

 #import <UIKit/UIKit.h>

 @interface ChaosPageView : UIView

 /** 图片数据 */
@property(nonatomic,strong) NSArray *images;
/** pageControl的当前页圆点颜色 */
@property(nonatomic,strong) UIColor *currentColor;
/** pageControl的其他页圆点的颜色 */
@property(nonatomic,strong) UIColor *otherColor;
/** 创建分页控件的类方法的声明 */
+(instancetype)pageView; @end

***********自定义控件类的实现*************

 //
// ChaosPageView.m
// scrollView分页
//
// Created by admin on 16/3/9.
// Copyright © 2016年 admin. All rights reserved.
// #import "ChaosPageView.h" @interface ChaosPageView () <UIScrollViewDelegate> // 扩展类 @property (weak, nonatomic) IBOutlet UIScrollView *scrollView;
@property (weak, nonatomic) IBOutlet UIPageControl *pageControl; @end @implementation ChaosPageView +(instancetype)pageView
{
// 从xib中读取控件
return [[[NSBundle mainBundle] loadNibNamed:NSStringFromClass(self) owner:nil options:nil] lastObject];
} #pragma mark - 重写的set方法
-(void)setImages:(NSArray *)images
{
// 重写set方法一定记住先将变量赋值给成员变量
_images = images; // 添加之前先清除
[self.scrollView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; for (int i = ; i<images.count; i++) {
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:images[i]];
[self.scrollView addSubview:imageView];
}
} -(void)setCurrentColor:(UIColor *)currentColor
{
// 重写set方法一定记住先将变量赋值给成员变量
_currentColor = currentColor;
self.pageControl.currentPageIndicatorTintColor = currentColor;
} -(void)setOtherColor:(UIColor *)otherColor
{
// 重写set方法一定记住先将变量赋值给成员变量
_otherColor = otherColor;
self.pageControl.pageIndicatorTintColor = otherColor;
} -(void)layoutSubviews
{
[super layoutSubviews];
// 设置scrollView尺寸
self.scrollView.frame = self.bounds;
// 获取图片尺寸
CGFloat imgX = self.scrollView.frame.size.width;
CGFloat imgY = self.scrollView.frame.size.height;
// 设置scrollView范围
self.scrollView.contentSize = CGSizeMake(_images.count * imgX, );
self.scrollView.showsHorizontalScrollIndicator = NO; // 设置pageControl
CGFloat pageW = ;
CGFloat pageH = ;
CGFloat pageX = imgX - pageW;
CGFloat pageY = imgY - pageH;
self.pageControl.frame = CGRectMake(pageX, pageY, pageW, pageH); // 设置每张图片的frame
for (int i = ; i < self.scrollView.subviews.count; i++) {
self.scrollView.subviews[i].frame = CGRectMake(i * imgX, , imgX, imgY);
}
self.pageControl.numberOfPages = self.images.count;
self.scrollView.pagingEnabled = YES;
} #pragma mark - <UIScrollViewDelegate>
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
// 计算当前页数的方法--用x方向的偏移量除以图片的宽度,结果四舍五入
// 四舍五入的方法--得到的结果+0.5,然后结果取整
self.pageControl.currentPage = (int)self.scrollView.contentOffset.x / self.scrollView.frame.size.width + 0.5;
} @end

三、定时器的使用

*********监听图片的滚动***********

iOS边练边学--UIScrollView和xib文件实现简单分页+定时器初使用的更多相关文章

  1. iOS边练边学--UIScrollView的属性简单使用,代理的简单介绍以及内容缩放

    一.什么是UIScrollView *移动设备的屏幕大小是极其有限的,因此直接展示在用户眼前的内容也是相当有限 *当展示的内容较多,超出一个屏幕时,用户可通过滚动收拾来查看屏幕以外的内容 *普通的UI ...

  2. iOS边练边学--Http网络再学习,简单介绍

    一.URL 什么是URL URL中常见的协议 二.Http Http的基本通信过程 发送Http请求的方法 GET 和 POST 对比 GET 和 POST 的选择 三.iOS中的Http学习 iOS ...

  3. iOS边练边学--多线程介绍、NSThread的简单实用、线程安全以及线程之间的通信

    一.iOS中的多线程 多线程的原理(之前多线程这块没好好学,之前对多线程的理解也是错误的,这里更正,好好学习这块) iOS中多线程的实现方案有以下几种 二.NSThread线程类的简单实用(直接上代码 ...

  4. iOS边练边学--xib文件初使用

    一.Xib和storyboard对比 *共同点: 1>都用来描述软件界面 2>都用Interface Builder工具来编辑 3>本质都是转换成代码去创建控件 *不同点 1> ...

  5. iOS边练边学--自定义非等高的cell

    一.使用xib或者storyboard自定义非等高的cell实现方式差不多,这里简单介绍一下通过xib文件实现的方法 <1.1>创建一个继承自UITableViewCell的子类,比如Ch ...

  6. iOS边练边学--自定义等高的cell

    一.storyboard自定义cell <1>创建一个继承自UITableViewCell的子类,比如ChaosDealCell <2>在storyboard中 <2.1 ...

  7. iOS边练边学--CALayer,非根层隐式动画,钟表练习

    一.CALayer UIView之所以能显示在屏幕上,完全是因为他内部的一个图层 在创建UIView对象时,UIView内部会自动创建一个图层(即CALayer对象),通过UIView的layer属性 ...

  8. iOS边练边学--UIGestureRecognizer手势识别器简单介绍

    iOS 3.2之后,苹果退出了手势识别功能(Gesture Recognizer),在触摸事件处理方面,大大简化了开发者的开发难度. 一.UIGestureRecognizer UIGestureRe ...

  9. iOS边练边学--触摸事件以及能够拖拽的UIView的练习

    一.用户在使用APP的过程中,会产生各种各样的事件.iOS中的事件可以分为3大类型: 二.响应者对象 在iOS中只有继承了了UIResponder的对象才能接受并处理事件,这样的对象称之为“响应者对象 ...

随机推荐

  1. PowerDesigner 的常用方法

    http://www.cnblogs.com/studyzy/archive/2008/01/23/1050194.html PowerDesigner 的常用方法 修改外键命名规则 选择Databa ...

  2. python学习笔记——多进程一 基础概念

    1 进程 进程:程序的一次(从开始到结束)执行过程,属于一个动态过程.是系统进行资源分配和调度的基本单位. 程序:指的是一个文件,磁盘中可执行的代码.属于一个静态文件 注:进程运行时需要把程序加载如内 ...

  3. duplicate files during packaging of apk

    OSChina Android APP 导入到Android Studio中不能运行,发现一小插曲. 主要实现了开源中国社区 OSC Android 客户端项目源码通过Gradle方式编译 在 And ...

  4. failed to load selinux policy freezing

    一.原因: 在修改selinux配置文件时输入并保存了一个错误的配置参数. 二.挽救: 1. 重启系统. 2. 在启动选项上按 e. 3. 进入grub编辑页面. 4. 向下移动光标至fi下一行. 5 ...

  5. gulp#4.0

    gitbook教程: https://dragon8github.gitbooks.io/gulp-webpack/content/an-zhuang-gulp-4-0.html gulpfile.j ...

  6. 如何用Latex合并多个pdf文件?

    如何用Latex合并多个pdf文件?   用TeX合并pdf, 用LaTeX合并pdf 代码: \documentclass[a4paper]{article} \usepackage{pdfpage ...

  7. 谱聚类(Spectral clustering)(1):RatioCut

    作者:桂. 时间:2017-04-13  19:14:48 链接:http://www.cnblogs.com/xingshansi/p/6702174.html 声明:本文大部分内容来自:刘建平Pi ...

  8. MySQL变量的定义与赋值

    MySQL存储过程中,定义变量有两种方式:1.使用set或select直接赋值,变量名以 @ 开头.例如:set @var=1;可以在一个会话的任何地方声明,作用域是整个会话,称为会话变量. 2.以 ...

  9. poj2151--Check the difficulty of problems(概率dp第四弹,复杂的计算)

    Check the difficulty of problems Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 5009   ...

  10. 有限狀態機FSM coding style整理 (SOC) (Verilog)

    AbstractFSM在數位電路中非常重要,藉由FSM,可以讓數位電路也能循序地執行起演算法.本文將詳細討論各種FSM coding style的優缺點,並歸納出推薦的coding style. In ...