UIScrollVIew是 ios里面经常用到的一个空间,今天我给大家讲解一下它的用法以及常用属性,有不对的地方大家请指出,相互学习!
创建一个新的工程,在ViewController里面,实现UIScrollVieController代理。
@interface ViewController : UIViewController<UIScrollViewDelegate>
然后在.m的@interferce VIewController()里面 声明一个全局scrollView;
@interface ViewController ()
{
UIScrollView *scrollView;
}
- (void)viewDidLoad
{
[superviewDidLoad];
//实例化Scrollview
scrollView=[[UIScrollViewalloc] initWithFrame:self.view.bounds];
CGFloat width=scrollView.frame.size.width;
CGFloat height=scrollView.frame.size.height;
for (NSInteger i =1 ; i <=5; i ++)
{
UIImage *image=[UIImageimageNamed:[NSString stringWithFormat:@"%ld.jpg",i]];
UIImageView *imageview=[[UIImageViewalloc] initWithImage:image];
//如果 imageView不设置大小 默认大小为所添加图片的大小 - 1 是让初始图像的坐标原点 为(0 , 0)
imageview.frame=CGRectMake((i -1) * width, 0 , width, height);
[scrollView addSubview:imageview];
}
[scrollView setContentSize:CGSizeMake(5 * width, height)];
[self.viewaddSubview:scrollView];
//设置scrollview 的其他属性 让效果更好
// 设置弹簧效果 关闭 默认为开启
[scrollView setBounces:NO];
[scrollViewsetDelegate:self];
//允许分页默认为关闭
[scrollViewsetPagingEnabled:YES];
//因为 scrollView的大小和屏幕大小一直 所以没有水平滚动条 SO 关键垂直滚动条
[scrollViewsetShowsHorizontalScrollIndicator:NO];
}
UIscrollview的操作基本完毕,现在为了效果更好看 ,我们可以添加一个UIPageController@interface ViewController ()
{
UIScrollView *scrollView;
UIPageControl *pageControl;
}
在上面方法的内部 添加以下代码
//scrollview 的属性设置告一段落为了让效果更加美观 我们添加一个分页控制器 ;
pageControl=[[UIPageControlalloc] init];
//设置控制器大小
[pageControlsetBounds:CGRectMake(0,0, 150,50)];
//把控制器添加到视图并添加方法
[pageControlsetCenter:CGPointMake(self.view.bounds.size.width/2,self.view.bounds.size.height-100)];
[pageControladdTarget:selfaction:@selector(pageControlValueChanged:)forControlEvents:UIControlEventValueChanged];
//设置控制器页数和当前页数
[pageControlsetNumberOfPages:5];
[pageControlsetCurrentPage:0];
//设置控制器选中颜色和未选中颜色
[pageControlsetPageIndicatorTintColor:[UIColorredColor]];
[pageControlsetCurrentPageIndicatorTintColor:[UIColorblueColor]];
[self.viewaddSubview:pageControl];
}
实现UIPageController的方法
#pragma mark - 页面控制
-(void)pageControlValueChanged:(UIPageControl *)pageControl
{
// NSLog(@"%d",pageControl.currentPage);
//
// CGFloat offsetX=pageControl.currentPage *scrollView.bounds.size.width;
//
// [scrollView setContentOffset:CGPointMake(offsetX, 0) animated:YES];
CGRect bounds = scrollView.bounds;
bounds.origin.x =CGRectGetWidth(bounds) * pageControl.currentPage;
bounds.origin.y =0;
[scrollViewscrollRectToVisible:bounds animated:YES];
}
现在基本的效果已经出来了,但是我们发现,点击pageControl的时候,页面会转动,但是拖动页面转动的时候,pageControl却不会变,所以要实现这个代理方法- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView
{
NSLog(@"scrollViewDidEndDecelerating");
int page = scrollView.contentOffset.x /200;
NSLog(@"scrollViewDidScrollscrollViewDidScroll %f",scrollView.contentOffset.x / 200);
pageControl.currentPage = page;
}
现在介绍一下UIScrollview和UIPageControl的常用//------------------UIScrollView常用属性----------------------
CGSize size=CGSizeMake(width, height);
//设置scrollview的内容大小 需要一个CGSize类型;
[scrollView setContentSize:size];
//设置每次的偏移量 需要一个CGPoint类型
[scrollView setContentOffset:point animated:YES];
//增加滚动视图 四周的增加滚动范围
UIEdgeInsets edge = UIEdgeInsetsMake(10.0, 10.0, 10.0, 10.0);
[scrollView setContentInset:edge];
//设置弹簧效果 默认为开启
[scrollView setBounces:NO];
//当滚动界面设置小于当前界面时依然反弹 默认为NO
[scrollView setAlwaysBounceHorizontal:NO];
[scrollView setAlwaysBounceVertical:NO];
//是否开启分页设置 默认为NO
[scrollView setPagingEnabled:YES];
//是否启用滚动 默认为YES
[scrollView setScrollEnabled:YES];
//表示滚动指示器从封闭滚动视图中被嵌入的距离 需要一个UIEdgeInsets类型
[scrollView setScrollIndicatorInsets:edge];
//设置指示器的风格 不选择为默认风格
[scrollView setIndicatorStyle:UIScrollViewIndicatorStyleBlack];
//------------------UIPageControl常用属性----------------------
//设置控制器大小
[pageControl setBounds:CGRectMake(0, 0, 150, 50)];
//设置一共有几个点
[pageControl setNumberOfPages:5];
//设置当前显示第几个点
[pageControl setCurrentPage:0];
//设置指示器的点的颜色
[pageControl setPageIndicatorTintColor:[UIColor redColor]];
//设置选中的点得颜色
[pageControl setCurrentPageIndicatorTintColor:[UIColor blackColor]];
//添加事件方法
[pageControl addTarget:self action:@selector(PageValueChanged:) forControlEvents:UIControlEventValueChanged];