现在的位置: 首页 > 综合 > 正文

UIScrollView ——– 实现简单的相册功能

2014年10月11日 ⁄ 综合 ⁄ 共 3741字 ⁄ 字号 评论关闭

@在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];

}

抱歉!评论已关闭.