Carousel效果也叫Cover Flow效果,就是图片以3D的形式进行左右滑动。
//
// Carousel.h
//
#import <uikit uikit.h="">
@interface Carousel : UIView <uiscrollviewdelegate>
{
UIPageControl *pageControl;
NSArray *images;
}
@property (nonatomic, retain) UIPageControl *pageControl;
@property (nonatomic, retain) NSArray *images;
- (void)setup;
@end
//
// Carousel.m
//
#import "Carousel.h"
@implementation Carousel
@synthesize pageControl;
@synthesize images;
#pragma mark - Override images setter
- (void)setImages:(NSArray *)newImages
{
if (newImages != images)
{
[newImages retain];
[images release];
images = newImages;
[self setup];
}
}
#pragma mark - Carousel setup
- (void)setup
{
UIScrollView *scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
[scrollView setDelegate:self];
[scrollView setShowsHorizontalScrollIndicator:NO];
[scrollView setPagingEnabled:YES];
[scrollView setBounces:NO];
CGSize scrollViewSize = scrollView.frame.size;
for (NSInteger i = 0; i < [self.images count]; i++)
{
CGRect slideRect = CGRectMake(scrollViewSize.width * i, 0, scrollViewSize.width, scrollViewSize.height);
UIView *slide = [[UIView alloc] initWithFrame:slideRect];
[slide setBackgroundColor:[UIColor colorWithRed:0 green:0 blue:0 alpha:0]];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.frame];
[imageView setImage:[UIImage imageNamed:[self.images objectAtIndex:i]]];
[slide addSubview:imageView];
[imageView release];
[scrollView addSubview:slide];
[slide release];
}
UIPageControl *tempPageControll = [[UIPageControl alloc] initWithFrame:CGRectMake(0, scrollViewSize.height - 20, scrollViewSize.width, 20)];
[self setPageControl:tempPageControll];
[tempPageControll release];
[self.pageControl setNumberOfPages:[self.images count]];
[scrollView setContentSize:CGSizeMake(scrollViewSize.width * [self.images count], scrollViewSize.height)];
[self addSubview:scrollView];
[scrollView release];
[self addSubview:self.pageControl];
}
#pragma mark - UIScrollViewDelegate
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
CGFloat pageWidth = scrollView.frame.size.width;
int page = floor((scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
[self.pageControl setCurrentPage:page];
}
#pragma mark - Cleanup
- (void)dealloc
{
[pageControl release];
[images release];
[super dealloc];
}
@end
//
// ViewController.m
// SimpleCarousel
//
#import "ViewController.h"
#import "Carousel.h"
@implementation ViewController
- (void)viewDidLoad
{
[super viewDidLoad];
// Initialize carousel object with frame size of images
Carousel *carousel = [[Carousel alloc] initWithFrame:CGRectMake(0, 0, 320, 205)];
// Add some images to carousel, we are passing autoreleased NSArray
[carousel setImages:[NSArray arrayWithObjects:@"image1.jpg", @"image2.jpg", @"image3.jpg", nil]];
// Add carousel to view
[self.view addSubview:carousel];
// Cleanup
[carousel release];
}
@end</uiscrollviewdelegate></uikit>