使用UIScrollView和UIPageControl实现一个简单的图片浏览功能

由于稍微累了,就直接贴粗糙实现的代码了(没有做一些边界检查等),算是backup。

[cpp]  view plain copy
  1. //  
  2. //  CCImageScrollView.h  
  3. //  CCImageScrollView  
  4. //  
  5. //  Created by Jason Lee on 12-6-13.  
  6. //  Copyright (c) 2012年 _XXX_. All rights reserved.  
  7. //  
  8.   
  9. #import <UIKit/UIKit.h>  
  10.   
  11. @interface CCImageScrollView : UIView <UIScrollViewDelegate>  
  12.   
  13. @property (nonatomic, retain) NSArray *imageArray;  
  14.   
  15. - (id)initWithFrame:(CGRect)frame pageNum:(NSInteger)pageNum pageEnabled:(BOOL)pageEnabled;  
  16.   
  17. @end  


[cpp]  view plain copy
  1. //  
  2. //  CCImageScrollView.m  
  3. //  CCImageScrollView  
  4. //  
  5. //  Created by Jason Lee on 12-6-13.  
  6. //  Copyright (c) 2012年 _XXX_. All rights reserved.  
  7. //  
  8.   
  9. #import "CCImageScrollView.h"  
  10.   
  11. @interface CCImageScrollView ()  
  12.   
  13. @property (nonatomic, retain) NSMutableArray    *imageViewArray;  
  14.   
  15. @property (nonatomic, assign) NSInteger         page;  
  16. @property (nonatomic, assign) BOOL              pageEnabled;  
  17.   
  18. @property (nonatomic, retain) UIScrollView      *scrollView;  
  19. @property (nonatomic, retain) UIPageControl     *pageControl;  
  20.   
  21. @end  
  22.   
  23. @implementation CCImageScrollView  
  24.   
  25. @synthesize imageArray = _imageArray;  
  26. @synthesize imageViewArray = _imageViewArray;  
  27.   
  28. @synthesize page = _page;  
  29. @synthesize pageEnabled = _pageEnabled;  
  30. @synthesize scrollView = _scrollView;  
  31. @synthesize pageControl = _pageControl;  
  32.   
  33. - (id)initWithFrame:(CGRect)frame  
  34. {  
  35.     self = [super initWithFrame:frame];  
  36.     if (self) {  
  37.         // Initialization code  
  38.     }  
  39.     return self;  
  40. }  
  41.   
  42. - (id)initWithFrame:(CGRect)frame pageNum:(NSInteger)pageNum pageEnabled:(BOOL)pageEnabled  
  43. {  
  44.     self = [super initWithFrame:frame];  
  45.     if (self) {  
  46.         // Initialization code  
  47.         self.backgroundColor = [UIColor blackColor]; // Default background-color  
  48.           
  49.         self.page = pageNum;  
  50.         self.pageEnabled = pageEnabled;  
  51.           
  52.         _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];  
  53.         [self.scrollView setContentSize:CGSizeMake(self.page * self.frame.size.width, self.frame.size.height)];  
  54.         self.scrollView.scrollEnabled = YES;  
  55.         self.scrollView.pagingEnabled = YES;  
  56.         self.scrollView.showsHorizontalScrollIndicator = NO;  
  57.         self.scrollView.showsVerticalScrollIndicator = NO;  
  58.         self.scrollView.delegate = self;  
  59.           
  60.         int defaultPageControlHeight = 36;  
  61.         _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - defaultPageControlHeight, self.frame.size.width, defaultPageControlHeight)];  
  62.         [self.pageControl setNumberOfPages:self.page];  
  63.         if (!self.pageEnabled) self.pageControl.hidden = YES;  
  64.           
  65.         [self addSubview:self.scrollView];  
  66.         [self addSubview:self.pageControl];  
  67.     }  
  68.     return self;  
  69. }  
  70.   
  71. - (void)dealloc  
  72. {  
  73.     [_scrollView release];  
  74.     [_pageControl release];  
  75.       
  76.     [_imageArray release];  
  77.     [_imageViewArray release];  
  78.     //  
  79.     [super dealloc];  
  80. }  
  81.   
  82. /* 
  83. // Only override drawRect: if you perform custom drawing. 
  84. // An empty implementation adversely affects performance during animation. 
  85. - (void)drawRect:(CGRect)rect 
  86. { 
  87.     // Drawing code 
  88. } 
  89. */  
  90.   
  91. - (void)loadImage  
  92. {  
  93.     if (nil == self.imageViewArray) {  
  94.         self.imageViewArray = [NSMutableArray arrayWithCapacity:self.page];  
  95.         for (int i = 0; i < self.page; ++i) {  
  96.             UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height)];  
  97.             imageView.contentMode = UIViewContentModeScaleAspectFit;  
  98.             [self.scrollView addSubview:imageView];  
  99.             [self.imageViewArray addObject:imageView];  
  100.             [imageView release], imageView = nil;  
  101.         }  
  102.     }  
  103.       
  104.     for (int i = 0; i < self.page; ++i) {  
  105.         UIImageView *imageView = [self.imageViewArray objectAtIndex:i];  
  106.         imageView.image = [UIImage imageNamed:[self.imageArray objectAtIndex:i]];  
  107.     }  
  108. }  
  109.   
  110. #pragma mark - setter & getter  
  111.   
  112. - (void)setImageArray:(NSArray *)imageArray  
  113. {  
  114.     if (_imageArray == imageArray) {  
  115.         return ;  
  116.     }  
  117.       
  118.     [_imageArray release];  
  119.     _imageArray = imageArray;  
  120.     [_imageArray retain];  
  121.       
  122.     [self loadImage];  
  123. }  
  124.   
  125. #pragma mark - UIScrollView Delegate  
  126.   
  127. - (void)scrollViewDidScroll:(UIScrollView *)scrollView  
  128. {  
  129.     CGFloat pageWidth = scrollView.frame.size.width;  
  130.     int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;  
  131.     self.pageControl.currentPage = page;  
  132. }  
  133.   
  134. @end  

使用方法如下:

[cpp]  view plain copy
  1. CCImageScrollView *imageScrollView = [[CCImageScrollView alloc] initWithFrame:CGRectMake(0, 0, 320, 460) pageNum:5 pageEnabled:YES];  
  2. imageScrollView.imageArray = [NSArray arrayWithObjects:@"1.jpg", @"2.jpg", @"3.jpg", @"4.jpg", @"5.jpg", nil];  
  3. [self.view addSubview:imageScrollView];  
  4. [imageScrollView release], imageScrollView = nil;  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值