UI:UIScrollView、UIPageControl
一、UIScrollView的常⽤用属性
二、UIScrollView的常⽤用代理方法
三、UIPageControl的使⽤用
四、UIPageControl与UIScrollView的结合使⽤用
UIScrollView是可以滚动的view,UIView本⾝身不能滚动,是UIView的子类
UIScrollview拓展了滚动⽅方⾯面的功能。 UIScrollView是所有滚动视图的基类。UITableView,UITextView等视图都是继承于该类。
使⽤用场景:显⽰示不下(单张⼤大图);内容太多(图⽂文混排);滚动头条(图⽚片);相册等
UIScrollview主要专⻓长于两个方⾯:
滚动:contentSize⼤大于frame.size的时候,能够滚动。 缩放:⾃自带缩放,可以指定缩放倍数。
contentSize //定义内容区域⼤小,决定是否能够滑动
contentOffset //视图左上⾓角距离坐标原点的偏移量
scrollsToTop //滑动到顶部(点状态条的时候)
pagingEnabled //是否整屏翻动
bounces //边界是否回弹
scrollEnabled //是否能够滚动
showsHorizontalScrollIndicator //控制是否显⽰示⽔水平⽅方向的滚动条
showVerticalScrollIndicator //控制是否显⽰示垂直⽅方向的滚动条
alwaysBounceVertical //控制垂直⽅方向遇到边框是否反弹
alwaysBounceHorizontal //控制⽔水平⽅方向遇到边框是否反弹
minimumZoomScale // 缩⼩小的最⼩小⽐比例
maximumZoomScale //放⼤大的最⼤大⽐比例
zoomScale //设置变化⽐比例
zooming //判断是否正在进⾏行缩放反弹
bouncesZoom
要实现缩放,还需要实现delegate,指定缩放的视图是谁。
- (void)scrollViewDidScroll:(UIScrollView |
滚动就会触发 |
- (void)scrollViewWillBeginDragging: |
开始拖拽时触发 |
- (void)scrollViewDidEndDragging:(UIScrollView |
结束拖拽时触发 |
- (void)scrollViewWillBeginDecelerating: |
开始减速时触发 |
- (void)scrollViewDidEndDecelerating: |
结束减速时触发 |
- (void)scrollViewDidEndZooming:(UIScrollView |
完成放⼤大缩⼩小触 发 |
- (UIView *)viewForZoomingInScrollView: |
指定某个 UIScrollVie w的⼦子视图可以 被放⼤大缩⼩小 |
UIPageControl
UIPageControl与UILabel相似 ⽤用于指⽰示当前第⼏⻚ 通常与UIScrollView配合使⽤用
currentPage //当前页
numberOfPages //指定⻚页⾯面的个数
UIPageControl从类名中可以看出,其⽗父类是UIControl 。所以可以像button⼀一样添加事件,只不过事件触发使⽤用的不是 UIControlEventsTouchUpInside⽽而是 UIControlEventsValueChanged。
通常在Scrollview滚动的时候修改pageControl的currentPage
使⽤用场景:引导⻚页,⾸首⻚页的轮播图等
contentSize决定了scrollView能否滚动,contentOffset控制内容区域的偏移量,pageEnabled控制能否整⻚页滚动。 scrollView实现缩放需要指定最⼤大缩放系数,最⼩小缩放系数,并指定
缩放的视图。 pageControl不单独使⽤用,通常与scrollView结合使⽤用。
//
// RootViewController.m
#define RandomColor [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0]
#import "RootViewController.h" @interface RootViewController ()<UIScrollViewDelegate>//当前类服从 UIScrollViewDelegate @end @implementation RootViewController - (void)viewDidLoad {
[super viewDidLoad];
//1.创建对象 //2配置属性
UIScrollView * scorll = [[UIScrollView alloc]initWithFrame:CGRectMake(, , , )];//初始化大小
scorll.backgroundColor = RandomColor;
//2.1 容量大小
scorll.contentSize = CGSizeMake(*, *);
//2.2内容区域偏移量(默认的 是 (0,0)不偏移的)
scorll.contentOffset = CGPointMake(, );//x 偏移300 y 不偏移
//2.3滚动条的显示样式
scorll.indicatorStyle = UIScrollViewIndicatorStyleWhite;
//2.4是否显示滚动条
scorll.showsHorizontalScrollIndicator = NO;//横向滚动条(隐藏,滚动条还在仅仅是隐藏了)
scorll.showsVerticalScrollIndicator = YES;//纵向的滚动条
//2.5是否可以滚动
// scorll.scrollEnabled = NO;//默认是可以支持滚动的(我们一般使用默认值) 这里改为 NO 他就相当于一个 UIView 视图
//2.6方向锁(设置控件是否支持单方向的滑动)
scorll.directionalLockEnabled = YES;//在滑动的时候 在给定的范围去拖拽 在另外一个方向是无用的 ,如果是斜着拖动的时候,该属性就不会锁
//2.7设置 反弹效果
// scorll.bounces = NO;//默认是有反弹效果
scorll.bounces = YES;
//2.8当显示的内容区域小于scorll 的边界的时候,依然有回弹效果 (默认是有的 YES)
scorll.alwaysBounceHorizontal = NO;//水平
scorll.alwaysBounceVertical = NO;//竖直方向
//2.9点击状态条的时候 是否偏移到最顶端 (显示手机的状态的区域 显示运营商 wifi 的区域 就是状态条) 默认是支持的
scorll.scrollsToTop = YES;
//2.10设置代理 检测 scrollView 的滚动过程
scorll.delegate = self;//最早学的是 textfield 的协议
//2.11滚动条视图在拖拽的时候 缩放的比例大小
scorll.minimumZoomScale = 0.1;//最小的缩放比例 (默认是1.0 就是不缩小)
scorll.maximumZoomScale = 2.5;//最大的缩放比例
//3.添加到根视图
[self.view addSubview:scorll]; //4.释放所有权
[scorll release]; // UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 600/2- 100, 400- 100)];
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(, ,, *)];
[imageView initWithImage:[UIImage imageNamed:@"a1.jpg"]];
imageView.tag = ;
[scorll addSubview:imageView];
[imageView release]; } - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning]; } #pragma MARK ----------UISCorllViewDelegate-------------------------------------------
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//scorllViewDidScroll 滚动条 ScrollView 发生滚动的时候触发
NSLog(@"scorllViewDidScroll 滚动条 ScrollView 发生滚动的时候触发 获取位置%@ 获取偏移量 ",NSStringFromCGPoint(scrollView.frame.origin));
}// any offset changes
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2){ }// any zoom scale changes // called on start of dragging (may require some time and or distance to move)
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{ }
// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0){ }
// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ } - (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{ }// called on finger up as we are moving
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{ }// called when scroll view grinds to a halt - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ }// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating //设置 scrollView 的缩放视图 功能
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
//viewForZoomingInScrollview: 这个方法是在拖动的过程中可以被缩放
UIImageView * View = (UIImageView *)[scrollView viewWithTag:];
return View;
}// return a view that will be scaled. if delegate returns nil, nothing happens
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2){ }// called before the scroll view begins zooming its content
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{ }// scale between minimum and maximum. called after any 'bounce' animations - (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
return YES;
}// return a yes if you want to scroll to the top. if not defined, assumes YES
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{ }// called when scrolling animation finished. may be called immediately if already at top @end
UIScrollView 的一些方法
#define RandomColor [UIColor colorWithRed:arc4random()%256/255.0 green:arc4random()%256/255.0 blue:arc4random()%256/255.0 alpha:1.0]
//1.创建对象
//2配置属性
UIScrollView * scorll = [[UIScrollView alloc]initWithFrame:CGRectMake(30, 50, 300, 400)];//初始化大小
scorll.backgroundColor = RandomColor;//这里的设置背景颜色
//2.1 容量大小
scorll.contentSize = CGSizeMake(width,height);
//2.2内容区域偏移量(默认的 是 (0,0)不偏移的)
scroll.contentOffset = CGPoint(x,y);
//2.3滚动条的显示样式
sroll.indicatorSStyle = 某一样式
//2.4是否显示滚动条
scroll.showsHoriziontalScrollIndicator = NO YES 横向的
scroll.showsVerticalScrollIndicator = NO YES 竖直方向
//2.5是否可以滚动
scroll.scrollEnabled = YES NO (默认 YES)如果NO 就相当于一个 UIView了
//2.6方向锁(设置控件是否支持单方向的滑动)
scroll.directionalLockEnabled = YES NO 在滑动的时候 在给定的范围去拖拽 在另外一个方向是无用的 ,如果是斜着拖动的时候,该属性就不会锁
//2.7设置 反弹效果
scroll.bouunces = YES NO 默认是 YES
//2.8当显示的内容区域小于scorll 的边界的时候,依然有回弹效果 (默认是有的 YES)
scroll.alwaysBounceHorizontal = YES NO
scroll.alwaysBounceVertiocal = YES NO
//2.9点击状态条的时候 是否偏移到最顶端 (显示手机的状态的区域 显示运营商 wifi 的区域 就是状态条) 默认是支持的
scroll.scrollToTop = YES NO
//2.10设置代理 检测 scrollView 的滚动过程
scroll.delegate = self;
//2.11滚动条视图在拖拽的时候 缩放的比例大小
scroll.minimumZoomScale = CGFloat //最小的缩放比例 (默认是1.0 就是不缩小)
scroll.maximumZoomScale = CGFloat //最大的缩放比例
创建相框对象 并放到 UIScrollView 里面
UIImageView * imageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0,600, 400*2)];
[imageView initWithImage:[UIImage imageNamed:@"a1.jpg"]];
imageView.tag = 102;
[scorll addSubview:imageView];
//创建对象
UIPageControl * page = [[UIPageControl alloc]initWithFrame:CGRectMake(x, y, width, height)];
page.backgroundColor = RandomColor;
//属性 //(设置总页数)
page.numberOfPages = number //图片对应的点 (设置总页数)
//设置当前页数
page.currentPage = number //设置为启动的时候为 当前第三页面 对应的点
//设置UIPageControl当前点的颜色
page.currentPageIndicatorTintColor = 设置颜色 //在点 page 的左部分 右边部分 点就会变化
//添加点击事件 (与 scrollView 结合 实现功能)
//用处:上面可以制作一个 用户引导页面
UISCorllViewDelegate 代理的协议里面实现的一组方法的实现,我们可以点开代理,然后拷出来自己实现
// 滚动条 ScrollView 发生滚动的时候触发 scorllViewDidScroll
// 缩放的图像发生缩放的时候触发 scrollViewDidZoom
// scrollView 将要进项拖拽的时候触发
//scrollView 将要结束拖拽的时候触发
//scrollView 已经结束拖拽的时候触发
// scrollView 触发时机:scrollView 将要减速 就是手指离开滚动条后触发
//scrollView 已经结束减速时候触发
// scrollView 已经结束滚动时候触发
//viewForZoomingInScrollview: 这个方法是在拖动的过程中可以被缩放
//scrollViewWillBeginZooming 是 scrollView 将要开始缩放的时候触发
//scrollViewDidEndZooming 是 scrollView 已经结束缩放时候触发
//scrollViewShouldScrollToTop 方法 对应上面点击状态条的时候 对应(设置)方法 scorll.scrollsToTop = YES; 在这个方法触发的时候会触发该方法,该方法是否支持 点击状态条 偏移到最上端 该属性默认是 YES
//scrollViewDidScrollToTop方法 是 scrollVIew 已经偏移到最上端 时候触发 效果 是刷新一下当页面前的数据 (前提是 已经设置过 scrollToTop 属性为 YES 的时候)
对应的协议实现方法代码:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView{
//scorllViewDidScroll 滚动条 ScrollView 发生滚动的时候触发
NSLog(@"scorllViewDidScroll 滚动条 ScrollView 发生滚动的时候触发 获取位置%@ 获取偏移量 %@ ",NSStringFromCGPoint(scrollView.frame.origin),NSStringFromCGPoint(scrollView.contentOffset));
}// any offset changes // scrollView 缩放的图像发生缩放的时候触发
- (void)scrollViewDidZoom:(UIScrollView *)scrollView NS_AVAILABLE_IOS(3_2){
//scrollViewDidZoom 缩放的图像发生缩放的时候触发
NSLog(@"%s %d",__FUNCTION__,__LINE__);//注意是双下划线
}// any zoom scale changes // called on start of dragging (may require some time and or distance to move)
// scrollView 将要进项拖拽的时候触发
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
NSLog(@"scrollView 将要进项拖拽的时候触发 手指刚放上去,将要拖拽");
}
// called on finger up if the user dragged. velocity is in points/millisecond. targetContentOffset may be changed to adjust where the scroll view comes to rest
//scrollView 将要结束拖拽的时候触发
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset NS_AVAILABLE_IOS(5_0){
NSLog(@"scrollView 将要结束拖拽的时候触发");
//
}
// called on finger up if the user dragged. decelerate is true if it will continue moving afterwards
// scrollView 已经结束拖拽的时候触发
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
NSLog(@"scrollView 已经结束拖拽的时候触发");
//
}
// scrollView 触发时机:scrollView 将要减速 就是手指离开滚动条后
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
NSLog(@" scrollView 触发时机:scrollView 将要减速 就是手指离开滚动条后"); }// called on finger up as we are moving //scrollView 已经结束减速
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
//当停止滑动的时候 让偏移量为(0,0)
// scrollView.contentOffset = CGPointMake(0, 0);//不带动画效果
NSLog(@"scrollView 已经结束减速");
[scrollView setContentOffset:CGPointMake(, ) animated:YES];//带动画效果
//scrollViewDidEndDecelerating:
}// called when scroll view grinds to a halt // scrollView 已经结束滚动
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView{ // }// called when setContentOffset/scrollRectVisible:animated: finishes. not called if not animating //设置 scrollView 的缩放视图 功能
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
//viewForZoomingInScrollview: 这个方法是在拖动的过程中可以被缩放
UIImageView * View = (UIImageView *)[scrollView viewWithTag:];
return View;
}// return a view that will be scaled. if delegate returns nil, nothing happens // scrollView 将要开始缩放的时候
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view NS_AVAILABLE_IOS(3_2){ }// called before the scroll view begins zooming its content //scrollView 已经结束缩放
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale{
[scrollView setZoomScale:1.0]; //缩放后还原为1.0 原来的大小
NSLog(@"scrollView 已经结束缩放");
}// scale between minimum and maximum. called after any 'bounce' animations //对应上面点击状态条的时候 对应(设置)方法 scorll.scrollsToTop = YES; 在这个方法触发的时候会触发该方法
//该方法是否支持 点击状态条 偏移到最上端 该属性默认是 YES
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView{
return YES;
}// return a yes if you want to scroll to the top. if not defined, assumes YES // scrollVIew 已经偏移到最上端 时候触发 效果 是刷新一下当页面前的数据 (前提是 已经设置过 scrollToTop 属性为 YES 的时候)
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView{
NSLog(@"scrollVIew 已经偏移到最上端 时候触发 效果 是刷新一下当页面前的数据 (前提是 已经设置过 scrollToTop 属性为 YES 的时候)");
}// called when scrolling animation finished. may be called immediately if already at top
UISCorllViewDelegate的协议方法实例 从上面的代码块里单独摘抄
-(void)handlePage:(UIPageControl *)sender{//这是点击 ScrollView 后偏移一个页面的宽度后 UIPageControl 上面的点与页面一一对应
NSLog(@"UIPageControl 点击事件 当前pagecontrol 的页数的下标 %ld ",sender.currentPage);
//获取到 scroll
UIScrollView * scroll = (UIScrollView *)[self.view viewWithTag:111];
[scroll setContentOffset:CGPointMake(300*sender.currentPage, 0)];
// scroll setContentOffset:<#(CGPoint)#> //是设置偏移量的方法
}
代码:
#import "AppDelegate.h"
#import "RootViewController.h"
#import "FirstLaunViewController.h"
#import "MacroHeader.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
// Override point for customization after application launch.
self.window.backgroundColor = [UIColor whiteColor];
[self.window makeKeyAndVisible];
//判断是否是第一次安装启动
//NSUserDefaults 类 是用来存储用户的偏好设置 (数据 持久化 轻量级)单例模式 单例(就是程序里面只有一个)
NSUserDefaults * user = [NSUserDefaults standardUserDefaults];//这个变量的生命周期就是软件的生命周期 存一些用户名,密码 是否第一次加载 BOOL isFirstLaunch = [user boolForKey:FIRST];//如果没有在查找出来,置为 NO "这里并不存入Key 数据"
if (!isFirstLaunch) {
//一旦发现为 NO 说明程序是第一次启动,之前没有存储过,指定 lanch 为window 的根视图控制器
//程序第一次安装需要加载用户引导界面
FirstLaunViewController * RootVC =[[FirstLaunViewController alloc]init];
self.window.rootViewController = RootVC;
[RootVC release];
}else{
//如果不是第一次安装运行,就指定主界面试图控制器为 window 的根视图
RootViewController * RootVC = [[RootViewController alloc]init];
self.window.rootViewController = RootVC;
[RootVC release];
} self.window.backgroundColor = [UIColor orangeColor]; return YES;
}
AppDelegate.m
//
// FirstLaunViewController.m #import "FirstLaunViewController.h"
#import "RootViewController.h"//本程序的 根视图控制器
#import "MacroHeader.h" @interface FirstLaunViewController ()<UIScrollViewDelegate> @end @implementation FirstLaunViewController - (void)viewDidLoad {
[super viewDidLoad];
// 第一次加载的用户引导页面
//布剧子视图
[self layoutSubViews];
} -(void)layoutSubViews{
[self setUpScrollView];//布局 scroll
[self setUpPageControl]; }
-(void)setUpScrollView{
UIScrollView * scroll = [[UIScrollView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];//[UIScreen mainScreen].bounds 就不要再加 [] le
scroll.tag = ;
// scroll.contentOffset = CGPointMake(self.view.frame.size.width,0);
//正页滑动
scroll.pagingEnabled = YES;
scroll.delegate = self;//设置代理
scroll.contentSize = CGSizeMake(kScreenWidth * kImageCount, kScreenHeight);
scroll.showsHorizontalScrollIndicator = NO;//不让横向的滚动条显示
//放图片
for (int i = ; i < kImageCount; i++) {
// UIImageView * imageView = [[UIImageView alloc]initWithFrame:[[UIScreen mainScreen]bounds]];
UIImageView * imageView = [[UIImageView alloc]initWithFrame: CGRectMake(kScreenWidth * i, , kScreenWidth, kScreenHeight)];
NSString * imageName = [NSString stringWithFormat:kPictureName,i+];
NSString * imagePath = [[NSBundle mainBundle]pathForResource:imageName ofType:kPictureType];
UIImage * image = (UIImage *)[UIImage imageWithContentsOfFile:imagePath];
// [imageView addSubview:image];
[imageView setImage:image];
imageView.tag = + i;
// imageView.frame = CGRectMake(kScreenWidth * i, 0, kScreenWidth, kScreenHeight);
// [self.view addSubview:imageView];
[scroll addSubview:imageView];//注意是添加到 scroll
[imageView release];
//最后一张需要轻怕手势(浏览最后一张图片轻拍后进入页面)
if(i == kImageCount - ){
UITapGestureRecognizer * tap = [[UITapGestureRecognizer alloc]initWithTarget:self action:@selector(handleTap:)];
[imageView addGestureRecognizer:tap];//这里不能少了这一步,给 imageView 指定轻拍对象
//打开用户交互
imageView.userInteractionEnabled = YES;
[tap release];
}
} [self.view addSubview:scroll];
[scroll release];
}
-(void)setUpPageControl{
UIPageControl * page = [[UIPageControl alloc]initWithFrame:CGRectMake((kScreenWidth- )/, kScreenHeight - , , )];//先确定控件的 宽 高 xy 就相应的确定了
page.tag = ;
//设置其余页的颜色
page.pageIndicatorTintColor = [UIColor orangeColor];
// page.currentPage = kImageCount;//页面总页数不是这样写的 page.currentPage 是什么?
page.numberOfPages = kImageCount;
//当前页面的颜色
page.currentPageIndicatorTintColor = [UIColor lightGrayColor];
// page.currentPageIndicatorTintColor = [UIColor redColor];
// UIScrollView * scroll = (UIScrollView *)[self.view viewWithTag:101];
// [scroll addSubview:page];
// page.backgroundColor = [UIColor redColor];//测试一下位置
[self.view addSubview:page];
[page release]; //添加响应的触发方法 (使用协议 这里就不需要了)
// [page addTarget:self action:@selector(handlePage:) forControlEvents:UIControlEventValueChanged];
}
#pragma mark -------Page页面的点与页面下标一致---------
//UIPageControl
//-(void)handlePage:(UIPageControl *)page{
// UIPageControl * pageview = [[UIPageControl alloc]init];
// pageview = (UIPageControl *)[self.view viewWithTag:102];
//
// UIScrollView * scrollview = [[UIScrollView alloc]init];
// scrollview = (UIScrollView *)[self.view viewWithTag:101];
//
//} #pragma mark -------轻拍进入程序主页面---------
//轻怕手势
-(void)handleTap:(UITapGestureRecognizer *)tap{
//当点击最后一张的时候,就意味着用户引导页已经结束,要进入到程序的主界面,这时候要将对应的 key 保存到轻量级的 NSUserDefaults
NSUserDefaults * user = [NSUserDefaults standardUserDefaults];//整个程序运行期间程序不会被回收
// [user boolForKey:@"first"]==YES;
[user setBool:YES forKey:FIRST];//当点击最后一张的时候,就意味着用户引导页已经结束,要进入到程序的主界面
//立即更新立即保存 同步,立即修改 存入到本地内存的字符串的值 这个方法是系统每隔一段时间去调用的方法(系统自己去保存)
[user synchronize];
//进入程序主界面(就是重新指定根视图控制器)
RootViewController * mainVC = [[RootViewController alloc]init];
//更改 wiindow 的根视图控制器 为主界面的视图控制器 mainVC
[UIApplication sharedApplication].keyWindow.rootViewController = mainVC;//UIApplication 也是一个单例对象
[mainVC release];
} #pragma mark -------UIScrollViewDelegate 协议实现---------
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView;{
UIPageControl * page = (UIPageControl *)[self.view viewWithTag:];
page.currentPage = scrollView.contentOffset.x/kScreenWidth;
// NSLog(@"%f %f",scrollView.contentOffset.x,scrollView.contentOffset.y);
} - (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
} /*
#pragma mark - Navigation // In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/ @end
FirstLaunViewController.m用户引导页面
#ifndef UseDemo_MacroHeader_h
#define UseDemo_MacroHeader_h //该文件可以定义工程里所有用到的宏 在需要的时候直接 导入该文件即可 //定义在 FirstLaunViewController.m里定义的 宏
#define kScreenWidth [[UIScreen mainScreen]bounds].size.width
#define kScreenHeight [[UIScreen mainScreen]bounds].size.height
#define kImageCount 6 //好处是方便每次修改图片的张数
#define kPictureName @"v6_guide_%d"
#define kPictureType @"png"
#define FIRST @"firstLaunch" #endif
MacroHeader.m 宏定义页面
UI:UIScrollView、UIPageControl的更多相关文章
- UI基础:UIScrollView、UIPageControl
UIScrollView UIScrollView 是可以滚动的视图,UIView本身不能滚动,子类UIScrollView扩展了滚动方面的功能. UIScrollView 是所有滚动视图的基类.以后 ...
- UI:归档、反归档、数据持久化
支持的文件读写类型:字符串.数组.字典.NSdata (可变的.不可变的.共有8个类) 对于数组.字典在写入文件时,其中的元素也必须是以上四种类型之一. 支持的数据类型有限.且简单 写入文件: 字符 ...
- UI:多线程 、用GCD创建线程
什么是应用(程序):就是我们编写的代码编译后生成的app文件 进程:凡是一个运行的程序都可以看作为一个进程,如打开的多个 word,就可以认为是一个进程的多个线程. 线程:至少有一个线程就是主线程,网 ...
- UI:UINavigationController、界面通信
IOS中实现对控制器的管理的控制器有:UINavigationController 和 UITableBarController 两个控制器.下面是主要学习前者. 参考 ⼀.UINavigationC ...
- UI:KVO、KVC
什么是KVC 什么是 KVO ? KVC:(NSKey ValueCoding)”键-值 编码“是一种间接的访问对象属性(字符串表征)的机制.对象的属性都可以通过使用KVC机制用相同的方式访问.我们 ...
- iOS开发之七:常用控件--UISlider、UISegmentedControl、UIPageControl的使用
一.UISlider的使用 其实UISlider在iOS开发中用的似乎不是很多,我们看到的用到的地方多是音乐播放器的音量控制,以及视频播放器中的音量控制. 还是记录一下吧! 1.常用属性 // 设置获 ...
- Hybrid框架UI重构之路:六、前端那点事儿(Javascript)
上文回顾 :Hybird框架UI重构之路:五.前端那点事儿(HTML.CSS) 这里讲述在开发的过程中,一些JS的关键点. 换肤 对于终端的换肤,我之前一篇文章有说了我的想法. 请查看:http:// ...
- Hybrid框架UI重构之路:五、前端那点事儿(HTML、CSS)
上文回顾 :Hybird框架UI重构之路:四.分而治之 这里讲述在开发的过程中,一些HTML.CSS的关键点. 单页模式的页面结构 在单页模式中,弱化HTML的概念,把HTML当成一个容器,BODY中 ...
- Hybrid框架UI重构之路:四、分而治之
上文回顾:Hybird框架UI重构之路:三.工欲善其事,必先利其器 上一篇文章有说到less.grunt这两个工具,是为了css.js分模块使用的.UI框架提供给使用者的时候,是一个大的xxx.js. ...
随机推荐
- 【英语】Bingo口语笔记(31) - Bring系列
bring up 表示在哪长大 要用被动形式 BYOB 请自带酒瓶
- margin collapse 之父子关系的DIV
打算花点时间将知识整理一下,虽然平时现用现查都能完成工作,可是当遇到面试这种事情的时候,临时查就来不及了... 关于margin,整理若干知识点如下: 一:父子关系的DIV标签以及未加margin时的 ...
- 第三集 欠拟合与过拟合的概念、局部加权回归、logistic回归、感知器算法
课程大纲 欠拟合的概念(非正式):数据中某些非常明显的模式没有成功的被拟合出来.如图所示,更适合这组数据的应该是而不是一条直线. 过拟合的概念(非正式):算法拟合出的结果仅仅反映了所给的特定数据的特质 ...
- nodejs学习--express篇
express篇:http://www.runoob.com/nodejs/nodejs-express-framework.html Express 提供了内置的中间件 express.static ...
- 大数据分析的众包平台—Kaggle
众包(Jeff Howe,2006)是一种在互联网蓬勃发展的背景下产生的一种创新的生产组织形式.在这样的商业模式下,企业利用网络将工作分配出去,通过让更合适的人群参与其中来发现创意和解决技术问题.比较 ...
- Arduino 使用舵机库时 其它引脚输出怪异 解决方案
使用Servo.h时,不管你在初始化时用的是9还是10脚,都不要把这两个脚作为舵机以外的用途! 例: servo.attach(9); digitalWrite(10,1);//错,不能把第10脚用作 ...
- js闭包用法
闭包 既保证了 内部函数的私有性 又可以向外公开 通过一个已有对象 向它注入属性 /** * 闭包 * 在函数中定义的函数,在外部使用 * 1.在函数内部定义的函数,在外部不能访问 */ functi ...
- sed命令使用记录
背景:文件A,文件B,文件格式一致,有两列,第一列为key,第二列为value. 目的:将文件A中的内容插入到文件B中,不能在最后,不能有重复key(我的key和value用tab键分割) 实现:我的 ...
- selenium python (八)定位frame中的对象
#!/usr/bin/python# -*- coding: utf-8 -*-__author__ = 'zuoanvip'#在测试过程中经常遇到frame嵌套的应用,加入页面上有A.B两个fram ...
- Axure rp 基础知识 转
首先做个声明:此次教程里为了快速完成,借用了一些网上已有教程的图文,不是剽窃,只图方便.另外,因为汉化版本可能功能名称等略有差别,请自行理解. 名词解释: 线框图:一般就是指产品原型,比如:把线框图尽 ...