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

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

//
//  CCImageScrollView.h
//  CCImageScrollView
//
//  Created by Jason Lee on 12-6-13.
//  Copyright (c) 2012年 _XXX_. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface CCImageScrollView : UIView <UIScrollViewDelegate>

@property (nonatomic, retain) NSArray *imageArray;

- (id)initWithFrame:(CGRect)frame pageNum:(NSInteger)pageNum pageEnabled:(BOOL)pageEnabled;

@end


//
//  CCImageScrollView.m
//  CCImageScrollView
//
//  Created by Jason Lee on 12-6-13.
//  Copyright (c) 2012年 _XXX_. All rights reserved.
//

#import "CCImageScrollView.h"

@interface CCImageScrollView ()

@property (nonatomic, retain) NSMutableArray    *imageViewArray;

@property (nonatomic, assign) NSInteger         page;
@property (nonatomic, assign) BOOL              pageEnabled;

@property (nonatomic, retain) UIScrollView      *scrollView;
@property (nonatomic, retain) UIPageControl     *pageControl;

@end

@implementation CCImageScrollView

@synthesize imageArray = _imageArray;
@synthesize imageViewArray = _imageViewArray;

@synthesize page = _page;
@synthesize pageEnabled = _pageEnabled;
@synthesize scrollView = _scrollView;
@synthesize pageControl = _pageControl;

- (id)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
    }
    return self;
}

- (id)initWithFrame:(CGRect)frame pageNum:(NSInteger)pageNum pageEnabled:(BOOL)pageEnabled
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code
        self.backgroundColor = [UIColor blackColor]; // Default background-color
        
        self.page = pageNum;
        self.pageEnabled = pageEnabled;
        
        _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, self.frame.size.width, self.frame.size.height)];
        [self.scrollView setContentSize:CGSizeMake(self.page * self.frame.size.width, self.frame.size.height)];
        self.scrollView.scrollEnabled = YES;
        self.scrollView.pagingEnabled = YES;
        self.scrollView.showsHorizontalScrollIndicator = NO;
        self.scrollView.showsVerticalScrollIndicator = NO;
        self.scrollView.delegate = self;
        
        int defaultPageControlHeight = 36;
        _pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, self.frame.size.height - defaultPageControlHeight, self.frame.size.width, defaultPageControlHeight)];
        [self.pageControl setNumberOfPages:self.page];
        if (!self.pageEnabled) self.pageControl.hidden = YES;
        
        [self addSubview:self.scrollView];
        [self addSubview:self.pageControl];
    }
    return self;
}

- (void)dealloc
{
    [_scrollView release];
    [_pageControl release];
    
    [_imageArray release];
    [_imageViewArray release];
    //
    [super dealloc];
}

/*
// Only override drawRect: if you perform custom drawing.
// An empty implementation adversely affects performance during animation.
- (void)drawRect:(CGRect)rect
{
    // Drawing code
}
*/

- (void)loadImage
{
    if (nil == self.imageViewArray) {
        self.imageViewArray = [NSMutableArray arrayWithCapacity:self.page];
        for (int i = 0; i < self.page; ++i) {
            UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(i * self.frame.size.width, 0, self.frame.size.width, self.frame.size.height)];
            imageView.contentMode = UIViewContentModeScaleAspectFit;
            [self.scrollView addSubview:imageView];
            [self.imageViewArray addObject:imageView];
            [imageView release], imageView = nil;
        }
    }
    
    for (int i = 0; i < self.page; ++i) {
        UIImageView *imageView = [self.imageViewArray objectAtIndex:i];
        imageView.image = [UIImage imageNamed:[self.imageArray objectAtIndex:i]];
    }
}

#pragma mark - setter & getter

- (void)setImageArray:(NSArray *)imageArray
{
    if (_imageArray == imageArray) {
        return ;
    }
    
    [_imageArray release];
    _imageArray = imageArray;
    [_imageArray retain];
    
    [self loadImage];
}

#pragma mark - UIScrollView Delegate

- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
    CGFloat pageWidth = scrollView.frame.size.width;
    int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.pageControl.currentPage = page;
}

@end

使用方法如下:

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

备忘一下,以后有时间、需要,再扩展。

你可能感兴趣的:(扩展,UIView,performance,interface,setter,initialization)