才做了两个月的IOS开发,从一个材料专业的学生,变为菜鸟程序员,对软件也产生了兴趣,最近在做一个项目,希望自己能够把项目中的东西记下来(毕竟是处女作),要把做过的与大家分享一下:

     对于这个项目首先就是研究了一下:UIPageControl and UIScrollView 来制作一个定时滑动的图片,并且增加手势功能。


     首先给出.h代码:


//
 //  ViewController.h
 //  ScrollViewDemo
 //
 //  Created by duostec on 13-9-21.
年
 //
 
#import <UIKit/UIKit.h>
 
 
@interface ScrollAndPageController :UIViewController<UIScrollViewDelegate,UIGestureRecognizerDelegate>
 
{
BOOL
    UIPageControl
NSInteger picNum;//用于计算一共有多少张图片
NSArray *imageNames;//用于存放一组图片的名字
UIScrollView *scroll;//定义UIScrollView
}
NSInteger) picNums andImageName:(NSArray
 @end

其中实现了两个代理,第一个是:UIScrollViewDelegate 其中的代理方法

void)scrollViewDidScroll:(UIScrollView

UIGestureRecognizerDelegate 其中的代理方法其中的一些方法与手势有关,但此程序好像用处不大;

写完了.h文件接下来是.m文件


//
 //  ViewController.m
 //  ScrollViewDemo
 //
 //  Created by duostec on 13-9-21.
年
 //
 
#import "ScrollAndPageController.h"
640,1136), [[UIScreen mainScreen] currentMode].size) : NO)
 
@interface  ScrollAndPageController ()
 
 @end
 
@implementation
 
-(id)initWithImageNumber:(NSInteger) picNums andImageName:(NSArray
{
if(self = [superinit]){
picNum
imageNames
    }
    return  self;
}
 
- (void)viewDidLoad
{
    [superviewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
   
    scroll = [[UIScrollViewalloc]initWithFrame:CGRectMake(0,0,310,120)];
   //定义scrollView 的显示大小
/*
 *scrollView有显示区域大小和内容区域大小之分
 *两者的区别在于,显示是用户可以看到的区域,而内容区域则是存放多个显示区域
*/
for (int i =0; i<picNum; i++) 
    {
UIImageView *newView = [[UIImageViewalloc]initWithImage:[UIImageimageNamed:imageNames[i]]];//实例化一个ImageView用来作为图片的容器
setClipsToBounds:YES];             //当图片的大小大于ImageView时不显示多出
frame =CGRectMake(i*(310),0,310, 120);
/*
 * 我要让多张图片在scrollView上横向滑动,所以关于x的起点坐标将会根据图片数量、以及图片的宽度有关
 * scrollView的内容区域将随着图片数量的改变而改变,但是显示区域是一定的,就像透过窗户看黄河,河水是动的,窗户是静止的
*/
scrolladdSubview:newView];
    }
scroll.contentSize =CGSizeMake(310*picNum,120);//这就是设置scrollView的内容视图大小
scroll.tag               =101;
pageController      = [[UIPageControlalloc]initWithFrame:CGRectMake(0,120,320, 20)]; //为pageControl实例化,初始化
scroll.pagingEnabled                           =YES;  //以显示窗口为标准进行可翻页动作
scroll.scrollEnabled                              =YES//是否可以滑动
    scroll.showsHorizontalScrollIndicator  =NO;  //不现实水平滚动轴 
    scroll.showsVerticalScrollIndicator       =NO;        //不现实垂直滚动轴
scroll.delegate =self; 
    [pageControllersetNumberOfPages:picNum];             //设置pageControl总页数,就是一共多少张图片就多少张页数
    [pageControllersetCurrentPage:0];
     
    pageController.backgroundColor    = [UIColorgrayColor];
pageController.tag                          =102;
    UIPanGestureRecognizer *tapRec = [[UIPanGestureRecognizeralloc]initWithTarget:self action: @selector(changePageByGes:)];//实例化手//势识别操作
delegate                             =self;
     
    [pageController addTarget:self action:@selector(changePage:)forControlEvents:UIControlEventValueChanged];
self.view addSubview:scroll];
    [self.view addSubview:pageController];//增加pageControl为子视图
    [self.view addGestureRecognizer:tapRec];//为view增加手势
/*
-(void)changePageByGes:(UIPanGestureRecognizer *)rec方法
-(void)changePage:(UIPageControl *)pageChange方法
-(void)changePage
*/
if(picNum>1)
    {
        [NSTimerscheduledTimerWithTimeInterval:4target:selfselector:@selector(changePage)userInfo:nilrepeats:YES];
    }
}
 
- (void)didReceiveMemoryWarning
{
    [superdidReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}
 
-(void)changePage:(UIPageControl
{
int witch = pageChange.currentPage;
        [scroll setContentOffset:CGPointMake(witch*310,0)animated:YES];
/*
witch*310(因为图片是加载到ScrollView上的)
setContentOffset方法用来指定x,y偏移0,0位置的数量,可以NSLog一下就明白了
*/
}
 
-(void)changePage
{
/*
 *此方法是用来定时滑动的flag用来判断滑动到了第一张还是最后一张,当到达了最后一张时应该向左滑动,当到达第一张时应该向右滑动
*/
     
    if(pageController.currentPage ==0)
    {
flag =YES;//如果当前的pageControll页数是第一张,flag为真
    }
    if(pageController.currentPage ==picNum-1)
    {
flag =NO;//如果当前的PageControl页数是最后一张,flag为假
    }
if(flag)
    {
//当前的pageControl页数是第一张时,向右滑动
int witch =pageController.currentPage+1;
        //pageController.currentPage = pageController.currentPage + 1 ;
        [scrollsetContentOffset:CGPointMake(witch*310,0)animated:YES];
            }
else
    {
//当前的pageControll页数是最后一张时,向左滑动
int witch =pageController.currentPage-1;
        //pageController.currentPage = pageController.currentPage -1;
        [scrollsetContentOffset:CGPointMake(witch*310,0)animated:YES];
         
    }
}
 
 
-(void)scrollViewDidScroll:(UIScrollView
{
/*
 *这个scrollView的代理方法写的有些粗糙,以后待改进,三个if句只是为了判断当前的页数是不是大于等于零,小于最大图片数
 *当滑动的偏移量转(当前页数)不在我们要求的范围内时,这个代理方法什么也不做
*/
UIPageControl *pageControl = (UIPageControl *)[self.viewviewWithTag:102];
    UIScrollView *scroll0 = (UIScrollView *)[self.viewviewWithTag:101];
     
if ([scrollViewisEqual:scroll0])
    {
staticint lastPageIndex =0;
CGFloat pageWidth = scrollView.frame.size.width;
NSInteger pageIndex =floor((scrollView.contentOffset.x - pageWidth /2) / pageWidth) +1; //此处就是通过计算scrollView的当前偏移量
if
        {
if (pageIndex >=0 && pageIndex <=picNum-1)
            {
setCurrentPage:pageIndex];//计算当前页数
                lastPageIndex = pageIndex;
                //NSLog(@"%.2f",scrollView.contentOffset.x);
            }
        }
    }
}
 
-(void)changePageByGes:(UIPanGestureRecognizer
{
 /*
  *用于用户滑动PageControl时改变当前页数和显示的图片
 */
    if(rec.state ==UIGestureRecognizerStateEnded) //判断手势动作的状态(要选择结束,也可以换成其他状态,但是效果会变不同)
    {
CGPoint xPoint = [rectranslationInView:pageController];//通过translationInView来判断用户的左右滑动;
NSLog(@"%f-------------",xPoint.x);
if(xPoint.x >0) //向右
        {
            if(pageController.currentPage <picNum-1)
            {
int witch =pageController.currentPage +1;
                [scrollsetContentOffset:CGPointMake(witch*310,0)animated:YES];
pageController.currentPage
            }
        }
if(xPoint.x<0)//向左
       {
if (pageController.currentPage >0)
           {
int witch =pageController.currentPage -1;
               [scrollsetContentOffset:CGPointMake(witch*310,0)animated:YES];
pageController.currentPage
           }
       }
    }
}
 
 @end

此处完-->下一节预习:答题页面UIPageViewController的转化以及代理