这里实现的是小相册功能.
根视图控制器显示相册的缩略图, 每点击一张缩略图跳到他的全图, 并且title显示第X张
这里用到了比较笨得3个循环, 双层循环也可以, 只是有一个小bug 就是 当照片不够一行的时候需要加判断 实现起来比较麻烦. 我这里有一个用单层循环来实现添加多行视图的方法, 只是理解起来有些困难, 先把这个方法分享出来:(这个方法与我代码的实现没有关系, 纯分享)
- (void)adjustIconsByClumns:(int)clumn {
//列宽(第一个表情的x值)
int oneX = (self.view.frame.size.width - kimgWH * clumn)/(clumn + 1);
//第一个表情的y值
int oneY = 100;
//创建表情
for (int i = 0; i < kInitCount; i++) {
UIView *arr =self.view.subviews[i];
NSLog(@"%@",arr.class);
// 列数(col)决定了x
int col = i % clumn;
// 行数(row)决定了y
int row = i / clumn;
//计算出对应xy的
CGFloat x = oneX + col * (oneX + kimgWH);
CGFloat y = oneY + row * (oneX + kimgWH);
if (self.flag == 1) {
UIView *view = self.view.subviews[i + 3];
CGRect temp = view.frame;
temp.origin = CGPointMake(x, y);
view.frame = temp;
}else{
int no = i % 9;
NSString *imageName = [NSString stringWithFormat:@"01%d.png",no];
[self addImg:imageName x:x y:y];
}
}
self.flag = 1;
}
这里是根视图控制器的部分:
- (void)thumbnailView {
for (int i = 0; i < 3; i++) {
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(30 + 110 * i, 130, 100, 100);
[button addTarget:self action:@selector(buttonClickOn:) forControlEvents:(UIControlEventTouchUpInside)];
button.backgroundColor = [UIColor purpleColor];
NSString *name = [NSString stringWithFormat:@"0%d",i + 1];
self.image = [UIImage imageNamed:name];
[button setBackgroundImage:self.image forState:UIControlStateNormal];
button.tag = i + 1;
[self.view addSubview:button];
}
for (int i = 0; i < 3; i++) {
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(30 + 110 * i, 130 * 2 + 10, 100, 100);
[button addTarget:self action:@selector(buttonClickOn:) forControlEvents:(UIControlEventTouchUpInside)];
button.backgroundColor = [UIColor purpleColor];
NSString *name = [NSString stringWithFormat:@"0%d",i + 1 + 3];
self.image = [UIImage imageNamed:name];
[button setBackgroundImage:self.image forState:UIControlStateNormal];
button.tag = i + 1 + 3;
[self.view addSubview:button];
}
for (int i = 0; i < 3; i++) {
UIButton *button = [UIButton buttonWithType:(UIButtonTypeCustom)];
button.frame = CGRectMake(30 + 110 * i, 130 * 3 + 10, 100, 100);
[button addTarget:self action:@selector(buttonClickOn:) forControlEvents:(UIControlEventTouchUpInside)];
button.backgroundColor = [UIColor purpleColor];
NSString *name = [NSString stringWithFormat:@"0%d",i + 1 + 3 + 3];
self.image = [UIImage imageNamed:name];
[button setBackgroundImage:self.image forState:UIControlStateNormal];
button.tag = i + 1 + 3 + 3;
[self.view addSubview:button];
}
}
- (void)buttonClickOn:(UIButton *)button {
DetailsViewController *detail = [[DetailsViewController alloc] init];
for (int i = 0; i < 9; i++) {
if (button.tag == i + 1) {
detail.page = button.tag;
}
}
[self.navigationController pushViewController:detail animated:YES];
}
这里是点击图片之后的部分:
- (void)showPhotograph {
self.scrollView = [[UIScrollView alloc] initWithFrame:(CGRectMake(0, 0, kScreenWidth, kScreenHeight))];
self.scrollView.contentSize = CGSizeMake(kScreenWidth * 9, kScreenHeight);
self.scrollView.tag = 100;
self.scrollView.delegate = self;
self.scrollView.pagingEnabled = YES;
self.scrollView.contentOffset = CGPointMake((self.page-1) * kScreenWidth, kScreenHeight);
for (int i = 0; i < 9; i ++) {
UIScrollView *subScrollView = [[UIScrollView alloc] initWithFrame:(CGRectMake ((0 + i * kScreenWidth), 0, kScreenWidth, kScreenHeight))];
subScrollView.tag = 300 + i;
subScrollView.minimumZoomScale = 0.5;
subScrollView.maximumZoomScale = 3;
subScrollView.delegate = self;
UIImageView *imageView = [[UIImageView alloc] initWithFrame:(CGRectMake (0, 0, kScreenWidth, kScreenHeight))];
imageView.tag = 200 + i;
NSString *name = [NSString stringWithFormat:@"0%d.png",i + 1];
UIImage *image = [UIImage imageNamed:name];
imageView.image = image;
[subScrollView addSubview:imageView];
[self.scrollView addSubview:subScrollView];
[imageView release];
[subScrollView release];
}
self.scrollView.bounces = YES;
self.scrollView.alwaysBounceHorizontal = YES;
self.scrollView.alwaysBounceVertical = YES;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.scrollEnabled = YES;
[self.view addSubview:self.scrollView];
[self.scrollView release];
}
- (void)pageView {
UIPageControl *pageControl = [[UIPageControl alloc] initWithFrame:(CGRectMake(0, kScreenHeight - 40, kScreenWidth, 40))];
pageControl.numberOfPages = 9;
pageControl.currentPage = self.page;
pageControl.pageIndicatorTintColor = [UIColor grayColor];
pageControl.tag = 400;
[pageControl addTarget:self action:@selector(actionPageControl:) forControlEvents:(UIControlEventValueChanged)];
[self.view addSubview:pageControl];
[pageControl release];
}
- (void)actionPageControl:(UIPageControl *)pageControl {
NSInteger page = pageControl.currentPage;
UIScrollView *scrollView = (UIScrollView *)[self.view viewWithTag:100];
CGRect frame = CGRectMake(kScreenWidth *page, 0, kScreenWidth, kScreenHeight);
[scrollView scrollRectToVisible:frame animated:YES];
}
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
NSArray *array = scrollView.subviews;
return array[0];
}
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
self.startMove = scrollView.contentOffset.x;
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
self.willEndMove = scrollView.contentOffset.x;
}
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//更改pageControl的圆点位置
UIPageControl *pageControl = (UIPageControl *)[self.view viewWithTag:400];
//contentOffset.x :x轴的偏移量
self.endMove = scrollView.contentOffset.x;
pageControl.currentPage = self.endMove / kScreenWidth;
//判断缩放
UIScrollView *scrollV = (UIScrollView *)[self.view viewWithTag:scrollView.tag + 200 + pageControl.currentPage];
// 向左移动缩放
if (self.startMove > self.willEndMove && self.startMove >self.endMove) {
[scrollV setZoomScale:1 animated:NO];
//向右移动缩放
} else if (self.startMove < self.willEndMove && self.startMove < self.endMove) {
[scrollV setZoomScale:1 animated:NO];
}
//相册第几张(从第二张开始显示)
NSString *name = [NSString stringWithFormat:@"第%ld张", pageControl.currentPage + 1];
self.navigationItem.title = name;
}