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

黑马程序员_iOS 的高级控件之UIScrollView

2014-03-25 11:02 113 查看
iOS,Android,Java培训,期待与您的交流

iOS应用开发的一项内容就是用户界面的开发。不管应用程序实际包含的逻辑有多复杂,如果这个应用程序没有提供友好的图形用户界面,將很难吸引用户。作为一个程序设计者,必须优先考虑用户的感受,一定要让用户感到爽,这个应用程序才有价值。

1 UIScrollView的基本概念

UIScrollView代表一个可滚动的控件,该控件允许用户拖动手指来滚动控件中的内容。通过滚动控件的支持,UIScrollView可以显示超过一个屏幕的内容。



UIScrollView支持如下的三个属性。

1、contentSize:该属性是CGSize类型,代表UIScrollView所需要显示内容的完整宽度和高度

2、contentInset:该属性是UIEdgeInsets类型,它是一个结构体,包含top、left、bottom、right四个成员变量,用于设置四个方向上,滚动条区域的大小

3、contentOffset:该属性是CGPoint类型,表示UIScrollView在显示内容上滚动的位置

- (void)viewDidLoad
{
[super viewDidLoad];

// 1.创建UIScrollView
UIScrollView *scrollView = [[UIScrollView alloc] init];
scrollView.frame = CGRectMake(0, 0, 250, 250); // frame中的size指UIScrollView的可视范围
scrollView.backgroundColor = [UIColor grayColor];
[self.view addSubview:scrollView];

// 2.创建UIImageView(图片)
UIImageView *imageView = [[UIImageView alloc] init];
imageView.image = [UIImage imageNamed:@"big.jpg"];
CGFloat imgW = imageView.image.size.width; // 图片的宽度,1366
CGFloat imgH = imageView.image.size.height; // 图片的高度,768
imageView.frame = CGRectMake(0, 0, imgW, imgH);
[scrollView addSubview:imageView];

// 3.设置scrollView的属性

// 设置UIScrollView的滚动范围(内容大小),如果滚动区域小于imageView的frame,则只能看到一部分图片
scrollView.contentSize = imageView.image.size;
//    scrollView.contentSize = CGSizeMake(320, 480);

// 隐藏水平滚动条
scrollView.showsHorizontalScrollIndicator = NO;
scrollView.showsVerticalScrollIndicator = NO;

// 用来记录scrollview滚动的位置,指的是scrollview的frame左上角顶点在滚动范围的坐标,滚动范围的原点也是左上角,并且不受滚动条区域的影响(contentInset属性)
//    scrollView.contentOffset = ;

// 去掉弹簧效果
//    scrollView.bounces = NO;

// 控制滚动条的区域大小,不影响contentSize的大小,可以理解为是在contenSize的基础上向外扩展
// top  left  bottom  right,不影响可视范围的大小,在可视范围截取一部分
scrollView.contentInset = UIEdgeInsetsMake(100, 20, 20, 20);

_scrollView = scrollView;
}
2 UIScrollView的缩放功能

通过手势,能够缩放UIScrollView里的内容。这个功能是通过代理模式实现,代理对象应该实现协议UISCrollViewDelegate的一个方法。

1、- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView,返回需要缩放的视图控件

其他可以实现的方法。

2、-(void)scrollViewDidZoom:(UIScrollView *)scrollView,正在缩放的时候调用

3、-(void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale,缩放完毕的时候调用

- (void)viewDidLoad
{
[super viewDidLoad];

// 1.添加UIScrollView
UIScrollView *scrollView = [[UIScrollView alloc] init];
//    scrollView.frame = CGRectMake(0, 0, 320, 460);
scrollView.frame = self.view.bounds;
[self.view addSubview:scrollView];

// 2.添加图片
UIImage *image = [UIImage imageNamed:@"big.jpg"];
// 调用initWithImage:方法创建出来的UIImageView,它的宽高默认跟图片的宽高一样
_imageView = [[UIImageView alloc] initWithImage:image];
//    // 设置图片
//    imageView.image = [UIImage imageNamed:@"big.jpg"];
//
//    // 设置frame
//    imageView.frame = CGRectMake(0, 0, imageView.image.size.width, imageView.image.size.height);
[scrollView addSubview:_imageView];

// 设置内容范围
scrollView.contentSize = image.size;

// 设置scrollview的代理对象
scrollView.delegate = self;

// 设置最大伸缩比例
scrollView.maximumZoomScale = 2.0;
// 设置最小伸缩比例
scrollView.minimumZoomScale = 0.2;
}

//ScrollView实现图片缩放功能:只能缩放它内部的控件,只需告诉ScrollView缩放哪个控件

#pragma mark - UIScrollView 的 代理方法
#pragma mark 这个方法返回的控件就能进行捏合手势缩放操作
#pragma mark 当UIScrollView尝试进行缩放的时候就会调用
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView
{
return _imageView;
}

#pragma mark 当缩放完毕的时候调用
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
//    NSLog(@"结束缩放 - %f", scale);
}

#pragma mark 当正在缩放的时候调用
- (void)scrollViewDidZoom:(UIScrollView *)scrollView
{
//    NSLog(@"-----");
}
3 UIScrollView的分页功能

UIScrollView的分页功能,一般都会和UIPageControl一起实现。UIPageControl由N个小圆点组成,每个原点代表一个页面,当前页面以高亮的原点显示。UIPageControl的常见属性。

NSInteger numberOfPages : 总页数

NSInteger currentPage : 当前的页码

BOOL hidesForSinglePage : 当只有一页的时候,是否要隐藏视图

UIScrollView的分页效果只需要设置pagingEnabled=YES

- (void)viewDidLoad
{
[super viewDidLoad];

CGFloat w = self.view.frame.size.width;
CGFloat h = self.view.frame.size.height;
for (int i = 0; i< kCount; i++) {
UIImageView *imageView = [[UIImageView alloc] init];

// 1.设置frame
imageView.frame = CGRectMake(i * w, 0, w, h);

// 2.设置图片
NSString *imgName = [NSString stringWithFormat:@"0%d.jpg", i + 1];
imageView.image = [UIImage imageNamed:imgName];

[_scrollView addSubview:imageView];
}

// height == 0 代表 禁止垂直方向滚动
_scrollView.contentSize = CGSizeMake(kCount * w, 0);
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.pagingEnabled = YES;  //用scrollView的Frame进行分页
_scrollView.delegate = self;

// 添加PageControl
UIPageControl *pageControl = [[UIPageControl alloc] init];
pageControl.center = CGPointMake(w * 0.5, h - 20);
pageControl.bounds = CGRectMake(0, 0, 150, 50);
pageControl.numberOfPages = kCount; // 一共显示多少个圆点(多少页)
// 设置非选中页的圆点颜色
pageControl.pageIndicatorTintColor = [UIColor redColor];
// 设置选中页的圆点颜色
pageControl.currentPageIndicatorTintColor = [UIColor blueColor];

// 禁止默认的点击功能
pageControl.enabled = NO;

[self.view addSubview:pageControl];
_pageControl = pageControl;
}

#pragma mark - UIScrollView的代理方法
#pragma mark 当scrollView正在滚动的时候调用
- (void)scrollViewDidScroll:(UIScrollView *)scrollView
{
int page = scrollView.contentOffset.x / scrollView.frame.size.width;
//    NSLog(@"%d", page);

// 设置页码
_pageControl.currentPage = page;
}
iOS,Android,Java培训,期待与您的交流
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: