刚学习ios开发,需要做一个app登陆view,上面一般是动态Image播放,下面是登陆按钮,如图:
初步思想:
1:先做一个scrollView可以左右拖动进行手动播放
2:做UIPageControl,即下面的白点可以翻页的
3:用NSTimer实现自动播放;
UIScrollView不能放置UIWebView和UITableView,因为他们一个是实现了UIScrollViewDelegate协议,一个是继承UIScrollView故会导致滚动错乱,如果要用,可以先用一个UIView装载一次;
ok,开始实现:
1:新建UIViewController
.h头文件实现UIScrollViewDelegate
#import@interface YLFisrtViewController : UIViewController @end
.m文件:
定义需要用到的变量:
NSArray * imageArr;//图片路径字符串数组 UIScrollView * scrollView;//滚动view UIPageControl * pageControl;//pageView BOOL Tend;//是否需要从头重新播放
一:实现手动滚动效果:
给self.view中添加一个scrollView
- (void)viewDidLoad{ [self initImgArr]; [self initScrollView]; [self.view addSubview:scrollView]; } -(void)initScrollView{ scrollView=[[UIScrollViewalloc]initWithFrame:CGRectMake(0, 0, kDeviceWidth,kDeviceHeight/3*2)]; scrollView.contentSize=CGSizeMake(kDeviceWidth*imageArr.count,kDeviceHeight/3*2); scrollView.delegate=self; scrollView.scrollEnabled=YES; for(int i=0;i如上就可以设置一个滚动图片的效果了;正在滚动的效果
第二步,加UIPageControl,做翻页效果,即产生白点
//在viewDidLoad方法里添加 [selfinitPageControl]; [self addSubview:pageControl]; //方法实现如下: -(void)initPageControl{ pageControl=[[UIPageControlalloc]initWithFrame:CGRectMake(kDeviceWidth/2-10, kDeviceHeight/3*2-20, 20, 20)]; pageControl.numberOfPages=imageArr.count; pageControl.currentPage=0; [pageControladdTarget:selfaction:@selector(changePage:) forControlEvents:UIControlEventValueChanged]; } //可以不要下面这个方法,此方法是手动点击白点的时候跳转相应页面视图 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ int page=scrollView.contentOffset.x/kDeviceWidth; pageControl.currentPage=page; } //并且记得在手动滚动的时候更改pageControl的页码 -(void)scrollViewDidScroll:(UIScrollView *)scrollView{ int page=scrollView.contentOffset.x/kDeviceWidth; pageControl.currentPage=page; }如图:滚动条和页面滚动点都在
第三步就是做一个定时任务自动翻转
在viewDidLoad里添加定时器
//启动定时任务 [NSTimerscheduledTimerWithTimeInterval:5target:selfselector:@selector(handleSchedule) userInfo:nilrepeats:YES]; 定时任务方法调用:(注意计算好最后一页循环滚动) -(void)handleSchedule{ ++pageControl.currentPage; if(Tend){ [scrollViewsetContentOffset:CGPointMake(0, 0) animated:YES]; pageControl.currentPage=0; }else{ [scrollViewsetContentOffset:CGPointMake(pageControl.currentPage*kDeviceWidth, 0) animated:YES]; } if (pageControl.currentPage==pageControl.numberOfPages-1) { Tend=YES; }else{ Tend=NO; }
最后修饰:
有了pageControl的白点标志翻滚,就不需要scrollView的滚动条了吧
scrollView.showsHorizontalScrollIndicator=NO;//有了白点了,不需要显示水平滑动线
备注:一些你可能需要的属性
scrollview.showsVerticalScrollIndicator = NO;//设置竖直滚动条是否出现
scrollview.showsHorizontalScrollIndicator = NO;//设置水平滚动条是否出现
scrollview.contentSize = CGSizeMake(600, 108); //scrollview的滚动范围,若宽度大于屏幕,则横滚,高度大于屏幕竖滚,如果都大,你懂得
scroll.pagingEnabled=YES;//scrollView使用页面属性,即不会停在页面之间,即只会显示第一页或者第二页,不会各一半显示
scrollview.canCancelContentTouches为YES,那么当你在UIScrollView上面放置任何子视图的时候,当你在子视图上移动手指的时候,UIScrollView会给子视图发送touchCancel的消息。而如果该属性设置为NO,ScrollView本身不处理这个消息,全部交给子视图处理。如果设置为NO了,并不是UIScrollView不能处理任何事件了,那么为何在子视图上快速滚动的时候,UIScrollView还能移动那。这个一定要区分前面所说的UIScrollView中断touch-Down事件,开启一个定时器。我们设置的这个cancancelContentTouches属性为NO时,只是让UIScrollView不能发送cancel事件给子视图。而前面所说的时,中断touch-down事件,和取消touch事件是俩码事,所以当快速在子视图上移动的时候,当然可以滚动。但是如果你慢速的移动的话,就可以区分这个属性了,假如设定为YES,在子视图上慢速移动也可以滚动视图,但是如果为NO 。因为UIScrollView,发送了cancel事件给子视图处理了,自己当然滚动不了了。
pageController.userInteractionEnabled=NO; //pagecontroller不响应点击操作
pageController.alpha=0; //设置pageController 透明,不可见