使用UIScrollView和UIPageControl做一個可以用手勢來切換圖片的效果

來源:互聯網
上載者:User

標籤:uiscrollview   手勢滾動圖片   uipagecontrol   

利用UIScrollView的滾動效果來實現,先:




實現過程是:在viewController裡先加入UIScrollView和UIPageControl:

-(void) loadView {    [super loadView];    UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, 320,480)];    UIPageControl* pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, 438, 320, 42)];    self.scrollView = scrollView;    self.pageControl = pageControl;    self.pageControl.opaque = 1;    [self.pageControl addTarget:self action:@selector(changePage:) forControlEvents:UIControlEventValueChanged];        [self.view addSubview:self.scrollView];    [self.view addSubview:self.pageControl];}


然後來初始化UIScrollView:

- (void)viewDidLoad{    [super viewDidLoad];    self.contentList = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4",@"5", nil];    NSMutableArray* controllers = [[NSMutableArray alloc] init];    for (unsigned i = 0 ; i < kNumberOfPages; i++) {        [controllers addObject:[NSNull null]];    }        self.viewControllers = controllers;    self.scrollView.pagingEnabled = YES;        //contentSize是內容的寬度    self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width*kNumberOfPages,                                             self.scrollView.frame.size.height);        self.scrollView.showsHorizontalScrollIndicator = NO;    self.scrollView.showsVerticalScrollIndicator = NO;    self.scrollView.scrollsToTop = NO;    self.scrollView.delegate = self;        self.pageControl.numberOfPages = kNumberOfPages;    self.pageControl.currentPage = 0;        [self loadScrollViewWithPage:0];    [self loadScrollViewWithPage:1];    // Do any additional setup after loading the view.}//UserImageViewController裡只有一個UIImageView-(void) loadScrollViewWithPage:(int)page{    if (page < 0) {        return;    }else if(page >= kNumberOfPages) {        //do some thing,like jump to other screen                CalendarViewExample* calendarView = [[CalendarViewExample alloc] init];        [self presentViewController:calendarView animated:YES completion:^{}];        return;    }        UserImageViewController* controller = [self.viewControllers objectAtIndex:page];    if ((NSNull*)controller == [NSNull null]) {        controller = [[UserImageViewController alloc] init];        [self.viewControllers replaceObjectAtIndex:page withObject:controller];    }        if (controller.view.superview == nil) {        CGRect frame = self.scrollView.frame;        frame.origin.x = frame.size.width * page;        frame.origin.y = 0;        controller.view.frame = frame;        [self.scrollView addSubview:controller.view];                        NSString* name =[self.contentList objectAtIndex:page];        NSString *path = [[NSBundle mainBundle] pathForResource:name ofType:@"jpg"];        controller.numberImage.image = [UIImage imageWithContentsOfFile:path];                   }}


如果用手指來滾動的時候:

-(void) scrollViewDidScroll:(UIScrollView *)scrollView{    if (pageControlUsed) {                return;    }        CGFloat pageWidth = scrollView.frame.size.width;    //page表示當前滾動哪一頁的標識    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth)+1;        self.pageControl.currentPage = page;        [self loadScrollViewWithPage:page-1];    [self loadScrollViewWithPage:page];    [self loadScrollViewWithPage:page+1];    }-(void) scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {    pageControlUsed = NO;}-(void) scrollViewDidEndDecelerating:(UIScrollView *)scrollView {    pageControlUsed = NO;}

然後如果切換到下一頁:

-(void) changePage:(id)sender{    int page = self.pageControl.currentPage;    NSLog(@"chanepage page=%d",page);        [self loadScrollViewWithPage:page-1];    [self loadScrollViewWithPage:page];            CGRect frame = self.scrollView.frame;    frame.origin.x = frame.size.width*page;    frame.origin.y = 0;    [self.scrollView scrollRectToVisible:frame animated:YES];        pageControlUsed = YES;}
代碼可以在http://download.csdn.net/detail/baidu_nod/7547659下載


聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.