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

图片浏览器的初级制作:UIScrollView UIPageControl

2015-12-09 10:52 344 查看
#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





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