您的位置:首页 > 产品设计 > UI/UE

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

2013-12-06 15:29 701 查看
由于稍微累了,就直接贴粗糙实现的代码了(没有做一些边界检查等),算是backup。

[cpp] view
plaincopy

//

// 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

[cpp] view
plaincopy

//

// 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

使用方法如下:

[cpp] view
plaincopy

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;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: