一、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. PLSQL_统计信息系列06_统计信息的历史和日志

    20150506 Created By BaoXinjian

  2. Go TCP网路程序编写

    client和server程序编写 面向长连接的编程 http://files.cnblogs.com/files/yyx1-1/Go_TCP.7z

  3. 用minGW编译ffmpeg(供替换opencv中引用的ffmpeg库)

    在安装好的opencv文件夹下找到路径:opencv245\opencv\3rdparty\ffmpeg,此路径下有一个readme.txt文件,内容例如以下所看到的: The build scrip ...

  4. php 多进程解决代码常驻内存的问题php 多进程解决代码常驻内存的问题

    PHP不适合做常驻的SHELl进程,因为它没有专门的gc例程,也没有有效的内存管理途径. 如果用PHP做常驻SHELL,会经常被内存耗尽导致abort而unhappy. 而且,如果输入数据非法,而脚本 ...

  5. [k8s]k8s 1.9(on the fly搭建) 1.9_cni-flannel部署排错 ipvs模式

    角色 节点名 节点ip master n1 192.168.14.11 节点1 n2 192.168.14.12 节点2 n3 192.168.14.13 https://raw.githubuser ...

  6. spring mvc 2.5.6配置

    兼容公司老版本号项目.必须得用spring mvc2.5.6,那么问题来了. 怎么配置controller都抛出no mapping的错误.经过查文档得出下面配置.仅供參考. servlet-conf ...

  7. Golang Redis操作

    1. Redis简介 Redis是一个开源的.使用C语言编写的.支持网络交互的.可基于内存也可持久化的Key-Value数据库.   1.1 特点 支持更多数据类型 和Memcached类似,它支持存 ...

  8. Oracle SQLDeveloper ORA-01017 invalid username/password;logon denied (密码丢失解决方案)

    oracle sys账号用sql developer工具无法登陆 用户名和密码不一致 如果的确是丢失密码的话:在SQL*Plus中执行如下命令:   SQL>conn/as sysdba (操作 ...

  9. mvn项目中的pom文件提示Error parsing lifecycle processing instructions解决

    清空.m2/repository下的所有依赖文件,重新下载即可解决该问题. 如果本地用户下没有.m2/repository 目录,找到如下mvn 指定的repository,进去之后清空所有文件.

  10. u-boot mkconfig文件分析

    #!/bin/sh -e #遇到非0返回 就退出脚本 # Script to create header files and links to configure # U-Boot for a spe ...