转自出处:UIScrollView -------- 实现简单的相册功能
@在MRC环境下:释放宏 #define RELEASE_SAFELY(__Pointer) do{[__Pointer release],__Pointer = nil;} while(0)
@思路:1个大的UIScrollView上嵌套N个小的UIScrollView ,小的UIScrollView实现缩放,大的UIScrollView实现滚动查看
1.定义一个HMTMyScrollView,继承自UIScrollView,用它来绘制放置图片UIImageView的小UIScrollView
- #import <UIKit/UIKit.h>
- @interface HMTMyScrollView : UIScrollView <UIScrollViewDelegate>
- @property (nonatomic,retain)UIImageView * imageView;
- @end
- #import "HMTMyScrollView.h"
- @implementation HMTMyScrollView
- -(void)dealloc{
- RELEASE_SAFELY(_imageView);
- [super dealloc];
- }
- - (id)initWithFrame:(CGRect)frame
- {
- self = [super initWithFrame:frame];
- if (self) {
- // Initialization code
- // 缩放最大的比例
- self.maximumZoomScale = 3.0;
- // 缩放最小的比例
- self.minimumZoomScale = 0.2;
- _imageView = [[UIImageView alloc]initWithFrame:[self bounds]];
- [self addSubview:_imageView];
- self.delegate = self;
- }
- return self;
- }
- - (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
- return _imageView;
- }
- @end
2.具体实现:
- #import "HMTRootViewController.h"
- #import "HMTMyScrollView.h"
- #define HEIGHT 548
- #define WIDTH 320
- #define TAG 100
- @interface HMTRootViewController (){
- NSInteger _previousPage;
- }
- @property (nonatomic,retain)UIPageControl * pageControl;
- @property (nonatomic,retain)UIScrollView * headScroll;
- @end
- @implementation HMTRootViewController
- - (void)dealloc{
- RELEASE_SAFELY(_pageControl);
- RELEASE_SAFELY(_headScroll);
- [super dealloc];
- }
- - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
- {
- self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
- if (self) {
- // Custom initialization
- _previousPage = 0;
- }
- return self;
- }
- - (void)viewDidLoad
- {
- [super viewDidLoad];
- // Do any additional setup after loading the view.
- [self realizePhotoAlbun];
- }
- - (void)realizePhotoAlbun{
- self.headScroll = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, WIDTH, HEIGHT)];
- _headScroll.backgroundColor = [UIColor grayColor];
- _headScroll.contentSize = CGSizeMake(WIDTH * 8, HEIGHT);
- _headScroll.bounces = NO;
- _headScroll.delegate = self;
- _headScroll.pagingEnabled = YES;
- _headScroll.showsHorizontalScrollIndicator = NO;
- [self.view addSubview:_headScroll];
- [_headScroll release];
- NSArray * arrayImage = @[@"h1.jpeg",@"h2.jpeg",@"h3.jpeg",@"h4.jpeg",@"h5.jpeg",@"h6.jpeg",@"h7.jpeg",@"h8.jpeg"];
- for (int i = 0; i < [arrayImage count]; i++) {
- HMTMyScrollView * photoScrollView = [[HMTMyScrollView alloc]initWithFrame:CGRectMake(WIDTH * i,0, WIDTH, HEIGHT)];
- photoScrollView.imageView.image = [UIImage imageNamed:[arrayImage objectAtIndex:i]];
- photoScrollView.tag = TAG + i;
- [_headScroll addSubview:photoScrollView];
- [photoScrollView release];
- }
- self.pageControl = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 518, 120, 40)];
- _pageControl.numberOfPages = 8;
- _pageControl.currentPageIndicatorTintColor = [UIColor purpleColor];
- _pageControl.pageIndicatorTintColor = [UIColor blackColor];
- [_pageControl addTarget:self action:@selector(controlPageControl:) forControlEvents:UIControlEventValueChanged];
- [self.view addSubview:_pageControl];
- [_pageControl release];
- }
- - (void)controlPageControl:(UIPageControl *)pageControl{
- // 点击UIPageControl,翻页产生动画效果
- [self.headScroll setContentOffset:CGPointMake(pageControl.currentPage * WIDTH, 0) animated:YES];
- }
- - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
- NSInteger nowPage = scrollView.contentOffset.x / WIDTH;
- self.pageControl.currentPage = nowPage;
- HMTMyScrollView * myScrollView = (HMTMyScrollView *)[self.headScroll viewWithTag:_previousPage + TAG];
- if (myScrollView.zoomScale != 1 && nowPage != _previousPage) {
- myScrollView.zoomScale = 1;
- }
- _previousPage = nowPage;
- NSLog(@"%s",__FUNCTION__);
- }
- - (void)didReceiveMemoryWarning
- {
- [super didReceiveMemoryWarning];
- // Dispose of any resources that can be recreated.
- }
- @end
@自动循环滚动效果
[NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(scrollTimer) userInfo:nil repeats:YES];
//设置滚动
-(void)scrollTimer{
timerCount++;
if (timerCount >= 4) {
timerCount=0;
}
[adView setContentOffset:CGPointMake(tableWidth * timerCount, 0)animated:YES];
[pageControl setCurrentPage:timerCount];
}