转自出处: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) {
-
-
-
- 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) {
-
- _previousPage = 0;
-
- }
- return self;
- }
-
- - (void)viewDidLoad
- {
- [super viewDidLoad];
-
- [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{
-
-
- [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];
-
- }
-
-
-
-
- @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];
}