效果图如上,实现的是一个页面引导页,最后跳到主页面,主页面是一个navigationController,但是导航栏给我隐藏了。
文件目录:自己定制的viewcontroller以及navigationController
先贴代码吧。
1、首先是GuideViewController类
GuideViewController.h
#import <UIKit/UIKit.h> #import "JKViewController.h" @interface GuideViewController : JKViewController <UIScrollViewDelegate> @property (strong,nonatomic) UIScrollView *scrollView; @property (strong,nonatomic) NSMutableArray *slideImages; @property (strong,nonatomic) UIPageControl *pageControl; @end
GuideViewController.m
#import "GuideViewController.h" #import "JKNavigationController.h" @interface GuideViewController() { NSTimer *fanyeTime; } @end @implementation GuideViewController @synthesize slideImages,scrollView; @synthesize pageControl; -(void)dealloc { [fanyeTime release]; [scrollView release]; [slideImages release]; [pageControl release]; } -(void)viewDidLoad { [super viewDidLoad]; //定时器循环 fanyeTime = [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(runTimePage) userInfo:nil repeats:YES]; //初始化 scrollView self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, 320, self.view.frame.size.height)]; scrollView.bounces = YES; scrollView.pagingEnabled = YES; scrollView.delegate = self; scrollView.showsHorizontalScrollIndicator = NO; [self.view addSubview:scrollView]; //初始化数组,并添加四张照片 slideImages = [[NSMutableArray alloc]initWithObjects:@"26.jpg",@"27.jpg",@"28.jpg",@"29.jpg",@" ",nil]; //初始化pageControl self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(120,440,100,18)]; [pageControl setCurrentPageIndicatorTintColor:[UIColor redColor]]; [pageControl setPageIndicatorTintColor:[UIColor blackColor]]; pageControl.numberOfPages = [self.slideImages count] - 1; pageControl.currentPage = 0; [pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventValueChanged]; [self.view addSubview:pageControl]; //创建四个图片 imageView for (int i = 0; i < [slideImages count]; i++) { UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]]; imageView.frame = CGRectMake(320 * i, 0, 320, self.view.frame.size.height); [scrollView setContentSize:CGSizeMake(320 * [slideImages count], self.view.frame.size.height)]; [scrollView addSubview:imageView]; // 首页是第0页,默认从第1页开始的。所以+320。。。 } } //scrollView的委托函数 -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { NSTimeInterval secondsPerDay = 1*1*3; NSDate *thire = [NSDate dateWithTimeIntervalSinceNow:secondsPerDay]; [fanyeTime setFireDate:thire]; CGFloat pagewidth = self.scrollView.frame.size.width; int currentPage = floor((self.scrollView.contentOffset.x - pagewidth/ ([slideImages count]+2)) / pagewidth) + 1; NSLog(@"currentPage------>%d",currentPage); pageControl.currentPage = currentPage; NSLog(@"slideImages count------>%d",[slideImages count]); if (currentPage==([slideImages count]-1)){ [self tiaozhuan]; } } // -(void)tiaozhuan { JKNavigationController *navigationController = [[[JKNavigationController alloc] initWithRootViewController:[[[JKViewController alloc]init]autorelease]]autorelease]; navigationController.navigationBarHidden = YES; [self presentViewController:navigationController animated:YES completion:nil]; } //pagecontrol的方法 -(void)turnPage { int page = pageControl.currentPage; NSLog(@"page----->%d",page); [self.scrollView scrollRectToVisible:CGRectMake(320*page,0,320,460) animated:NO]; if (page == 3) { [fanyeTime invalidate]; [NSTimer scheduledTimerWithTimeInterval:3 target:self selector:@selector(tiaozhuan) userInfo:nil repeats:YES]; } } //定时器绑定方法 -(void)runTimePage { int page = pageControl.currentPage; page++; pageControl.currentPage = page; [self turnPage]; } - (void)didReceiveMemoryWarning { [super didReceiveMemoryWarning]; // Dispose of any resources that can be recreated. } @end
2、接着是YCScroView类
YCScroView.h
#import <UIKit/UIKit.h> @protocol TapImageDelegate <NSObject> -(void)tapImage:(int)index; @end @interface YCScroView : UIView @property (retain,nonatomic) id<TapImageDelegate>delegate; -(id)initWithArray:(NSArray*)array WithTitle:(NSString *)title WithFrame:(CGRect)frame; @end
YCScroView.v
#import "YCScroView.h" #define Max 10 @interface YCScroView() <UIScrollViewDelegate> { NSArray *_array; int pageWidth,pageHight; } @property (strong,nonatomic)UIScrollView *scrollView; @property (strong,nonatomic)NSMutableArray *slideImages; @property (strong,nonatomic)UIPageControl *pageControl; @property (strong,nonatomic)UITapGestureRecognizer *tap; @end @implementation YCScroView @synthesize scrollView,slideImages; @synthesize pageControl; @synthesize tap; -(id)initWithArray:(NSArray *)array WithTitle:(NSString *)title WithFrame:(CGRect)frame { self = [super initWithFrame:frame]; if (self) { _array = array; pageWidth = frame.size.width; pageHight = frame.size.height; [self creatScollView]; } return self; } -(void)creatScollView { self.scrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, pageWidth, pageHight)]; scrollView.bounces = YES; scrollView.pagingEnabled = YES; scrollView.delegate = self; scrollView.userInteractionEnabled = YES; scrollView.showsHorizontalScrollIndicator = NO; [self addSubview:scrollView]; slideImages = [NSMutableArray arrayWithArray:_array]; [slideImages retain]; self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(120, pageHight-20, 100, 18)]; [pageControl setCurrentPageIndicatorTintColor:[UIColor whiteColor]]; [pageControl setPageIndicatorTintColor:[UIColor grayColor]]; pageControl.numberOfPages = [_array count]; pageControl.currentPage = 0; // [pageControl addTarget:self action:@selector(turnPage) forControlEvents:UIControlEventValueChanged]; // 触摸mypagecontrol触发change这个方法事件 [self addSubview:pageControl]; for (int i =0; i<[slideImages count]; i++) { UIImageView *imageView = [[UIImageView alloc]initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:i]]]; imageView.frame = CGRectMake((pageWidth * i)+ pageWidth, 0, pageWidth, pageHight); [scrollView addSubview:imageView]; // 首页是第0页,默认从第1页开始的。所以+320。。。 } UIImageView *imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:([slideImages count]-1)]]]; imageView.frame = CGRectMake(0, 0, pageWidth, pageHight); [scrollView addSubview:imageView]; //取数组第一张图片,放在最后 imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:[slideImages objectAtIndex:0]]]; imageView.frame = CGRectMake((pageWidth * ([slideImages count] + 1)) , 0, pageWidth, pageHight); // 添加第1页在最后 循环 [scrollView addSubview:imageView]; [scrollView setContentSize:CGSizeMake(pageWidth * ([slideImages count] + 2), pageHight)]; // +上第1页和第4页 原理:4-[1-2-3-4]-1 [scrollView setContentOffset:CGPointMake(0, 0)]; [self.scrollView scrollRectToVisible:CGRectMake(pageWidth,0,pageWidth,pageHight) animated:NO]; [self addTapEventOnMyScrollView]; UIImageView *View=[[UIImageView alloc]initWithFrame:CGRectMake(0, 94, pageWidth, 2)]; View.image=[UIImage imageNamed:@"huixian.png"]; [self addSubview:View]; UIImageView *View1=[[UIImageView alloc]initWithFrame:CGRectMake(0, 94, 80, 2)]; View1.image=[UIImage imageNamed:@"lanxian.png"]; View1.tag=1000; [self addSubview:View1]; } -(void)addTapEventOnMyScrollView; { tap = [[UIGestureRecognizer alloc] initWithTarget:self action:@selector(tapEvent)]; [scrollView addGestureRecognizer:tap]; } -(void)tapEvent { [self.delegate tapImage:pageControl.currentPage]; } -(void)scrollViewDidScroll:(UIScrollView *)scrollView { CGFloat pagewidth = self.scrollView.frame.size.width; int page = floor((self.scrollView.contentOffset.x - pagewidth/([slideImages count]+2))/pagewidth)+1; page --; // 默认从第二页开始 pageControl.currentPage = page; } -(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView { CGFloat pagewidth = self.scrollView.frame.size.width; int currentPage = floor((self.scrollView.contentOffset.x - pagewidth/ ([slideImages count]+2)) / pagewidth) + 1; if (currentPage==0) { [self.scrollView scrollRectToVisible:CGRectMake(320 * [slideImages count],0,320,pageHight) animated:NO]; // 序号0 最后1页 } else if (currentPage==([slideImages count]+1)) { [self.scrollView scrollRectToVisible:CGRectMake(320,0,320,pageHight) animated:NO]; // 最后+1,循环第1页 } UIImageView* imageView=(UIImageView*)[self viewWithTag:1000]; [imageView removeFromSuperview]; UIImageView* imageview=[[UIImageView alloc]initWithImage:[UIImage imageNamed:@"lanxian.png"]]; imageview.frame=CGRectMake(pageControl.currentPage*80, 94, 80, 2); imageview.tag=1000; [self addSubview:imageview]; } - (void)runTimePage { int page = pageControl.currentPage; // 获取当前的page page++; page = page > [slideImages count]-1 ? 0 : page ; pageControl.currentPage = page; [self turnPage]; } // pagecontrol 选择器的方法 - (void)turnPage { int page = pageControl.currentPage; // 获取当前的page [self.scrollView scrollRectToVisible:CGRectMake(320*(page+1),0,320,460) animated:NO]; // 触摸pagecontroller那个点点 往后翻一页 +1 } -(void)dealloc{ [super dealloc]; } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation == UIInterfaceOrientationPortrait); } @end
这是来那个最主要的类,完成这两个类,基本上引导页就已经完成了。