#import "MangoView.h"
//设置宽和高的宏定义
#define KWH self.frame.size.width
#define KHG self.frame.size.height
@interface MangoView()
@property(nonatomic, retain) UIScrollView *scrollView;
@property(nonatomic, retain) UIPageControl *pageControl;
@end
@implementation MangoView
- (instancetype)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self) {
[self loginCustonView];
}
return self;
}
-(void)loginCustonView{
//初始化设置大小ScrollView(图片浏览器)
self.scrollView = [[UIScrollView alloc] initWithFrame:self.frame];
//设置ScrollView的背景颜色;
self.backgroundColor = [UIColor cyanColor];
//当contentSize大于ScrollView.frame,时就可以滑动;如果只有宽度大于ScrollView的宽度,就可以左右移动,大于高度就可以上下移动;
//图片浏览器的设计思路
/*
1、图片如果想要滑动,那么需要把图片添加到scrollview上;
2、scrollview本身自带缩放功能,图片的大小想要依赖于scrollview的放大缩小;
3、把所有的题片都添加到scrollview上,scrollview的放大缩小是整个大的scrollview。而不是每张图片放大缩小,不满足要求;
4、把每张图片都添加到一个scrollview上,这样每个图片都实现了缩小放大的功能。同时有一个问题,如何让这些图片能放大缩小来回滚动?
5、把加载每张图片的scrollview添加到一个大的scrollview上,就能实现滑动效果;
*/
for (int i = 1; i < 8; i++) {
NSString *ima = [NSString stringWithFormat:@"%d.jpg",i];
UIImageView *imageview1 = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, KWH, KHG)];
UIScrollView *scrollView1 = [[UIScrollView alloc]initWithFrame:CGRectMake(KWH * (i-1), 0, KWH, KHG)];
//最小缩小比例;
scrollView1.minimumZoomScale = 0.5;
//最大放大比例;
scrollView1.maximumZoomScale = 2.0;
scrollView1.delegate = self;
//把每一张图片的scrollView添加到大的scollview中;
imageview1.tag = 110;
imageview1.image = [UIImage imageNamed:ima];
[scrollView1 addSubview:imageview1];
[self.scrollView addSubview:scrollView1];
[imageview1 release];
}
//滑动到顶部,只有在竖屏的情况下才会显示效果
self.scrollView.scrollsToTop = YES;
//是否整屏滑动,默认值为NO;
self.scrollView.pagingEnabled = YES;
//遇到边界是否可以弹回,默认yes是滑动到边界还可以继续滑动,但是松手的时候还是可以继续续弹回,如果NO滑动到边界就停止,边界无法滑动;
self.scrollView.bounces = YES;
//是否可以滑动,no是不可以;
self.scrollView.scrollEnabled = YES;
//是否显示水平方向滚动条;
self.scrollView.showsHorizontalScrollIndicator = NO;
//是否显示竖直方向滚动条
self.scrollView.showsVerticalScrollIndicator = NO;
//内容的大小如果小于scrollView的时候仍然可以左右滑动边界;
self.scrollView.alwaysBounceHorizontal = NO;
self.scrollView.alwaysBounceVertical = NO;
//设置代理;
self.scrollView.delegate = self;
//scrollView的宽度;
self.scrollView.contentSize = CGSizeMake(KWH * 7, KHG);
//将ScrollView添加到视图
[self addSubview:self.scrollView];
//释放ScrollView
[self.scrollView release];
//scrollView的frame 和 contentSize的区别:
/*
1、frame是scrollView的frame能够显示的大小;
2、contentSize是scrollView的frame里内容的大小;
3、frame的大小决定了你能看到的内容的大小;
*/
//创建PageControl;
self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0, KHG - 80, KWH, 30)];
//设置PageControl的个数
self.pageControl.numberOfPages = 7;
//未选中的颜色
self.pageControl.pageIndicatorTintColor = [UIColor grayColor];
//当前的颜色;
self.pageControl.currentPageIndicatorTintColor = [UIColor greenColor];
[self.pageControl addTarget:self action:@selector(pageSelectAction:) forControlEvents:UIControlEventValueChanged];
[self addSubview:self.pageControl];
[self.pageControl release];
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
CGFloat pageWidth = self.frame.size.width;
//contentOffset,是当前scrollView距离远点偏移的位置
//获取scrollView停止时的偏移量;
CGPoint offset = self.scrollView.contentOffset;
//通过偏移量和页面宽度计算出当前页数;
NSInteger pageNum = offset.x / pageWidth;
//修改当前页;
self.pageControl.currentPage = pageNum;
}
-(void)dealloc{
[_scrollView release];
[_pageControl release];
[super dealloc];
}
//改变图片大小的方法
-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
//在scollView上通过tag值
UIImageView *zoomImageView = (UIImageView *)
[scrollView viewWithTag:110];
return zoomImageView;
}
//让scrollView的页面跟随pageControl的点击
-(void)pageSelectAction:(UIPageControl *)pageControl{
//获取pageControl点击的页面在第几页;
NSInteger pageNum = pageControl.currentPage;
//第二步,获取页面的宽度:
CGFloat pageWidth = self.scrollView.frame.size.width;
//让scrollView滚动到第几页;
self.scrollView.contentOffset = CGPointMake(pageNum * pageWidth, 0);
}
@end