0 headerView的拉伸效果 在tableview中
_headView.frame=CGRectMake(0, 0, Screen_Width, Screen_Width*0.75);
-(void)scrollViewDidScroll:(UIScrollView *)scrollView
{
float scrollViewY= scrollView.contentOffset.y;
if (scrollViewY<-Screen_Width*0.75) {
_headView.frame=CGRectMake(0, 0, Screen_Width, -scrollViewY);
}else{
_headView.frame=CGRectMake(0, -scrollViewY- Screen_Width*0.75, Screen_Width, Screen_Width*0.75);
}
}
1.srollViewDidScrollView
图片有拉伸放大效果
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
if (scrollView == self.scrollView) {
CGPoint point = scrollView.contentOffset;
//向下会是负的
NSLog(@"*****%f",point.y);
if (point.y < -15) {
CGAffineTransform newTransform =
CGAffineTransformScale(self.userBackImageView.transform, 1.007,1.007);
[self.userBackImageView setTransform:newTransform];
}else {
[UIView animateWithDuration:0.5 animations:^{
self.userBackImageView.frame = CGRectMake(0, 0, ScreenSize.width, 240);
}];
}
}
}
2. scrollViewDidEndDragging
_tableView用scrollView的刷新方法
//结束拖拽
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
//判断向上偏移量是否超过20,超过则刷新
//偏移量contentoffSet+视图当前大小的高(也可以说是当前屏幕大小Height)>视图实际大小的高contentSize+20
if (scrollView.contentOffset.y+scrollView.frame.size.height>scrollView.contentSize.height+20&&_isUpRefresh==YES) {
[self pullUpRefresh];
}
}
3.UIScrollView的小玩法
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor=[UIColor whiteColor];
_scrollView=[[UIScrollView alloc]initWithFrame:CGRectMake(25, 200, 324, 48)];
_scrollView.backgroundColor=[UIColor lightGrayColor];
_scrollView.contentSize=CGSizeMake(324, 48*12);
_scrollView.layer.masksToBounds=YES;
_scrollView.layer.cornerRadius=24;
[self.view addSubview:_scrollView];
_backView=[[UIView alloc]initWithFrame:CGRectMake(0, 0, 324, 48*12)];
NSArray *contentArr=@[@"大家好,终于平安到达....",@"今天吃了一家牛排,肥瘦均匀",@"刚到机场准备前往市区...",@"准备肥家,大家旅行愉快!",@"附近中国大使馆在哪?",@"我在外面看夜景,好美哟!",@"没时间了,准备直接免税店",@"今天天气不错",@"还是习惯吃中餐",@"注意安全,保护好钱包",@"我早就从酒店出发啦",@"大家下一站准备去哪?"];
//NSLog(@"%ld",contentArr.count);
for (int i=0; i<10; i++) {
UIView *view=[[UIView alloc]initWithFrame:CGRectMake(0, 48*i, 324, 48)];
view.backgroundColor=[UIColor clearColor];
UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(5, 7, 34, 34)];
imageView.backgroundColor=[UIColor colorWithRed:arc4random()%255/256.0 green:arc4random()%255/256.0 blue:arc4random()%255/256.0 alpha:1];
imageView.layer.masksToBounds=YES;
imageView.layer.cornerRadius=17;
[view addSubview:imageView];
UILabel *chatLabel=[[UILabel alloc]initWithFrame:CGRectMake(55, 0, 250, 48)];
chatLabel.text=contentArr[arc4random()%11+1];
chatLabel.textColor=[UIColor redColor];
chatLabel.font=[UIFont systemFontOfSize:13];
[view addSubview:chatLabel];
[_backView addSubview:view];
}
[_scrollView addSubview:_backView];
_timer=[NSTimer scheduledTimerWithTimeInterval:1 target:self selector:@selector(UIViewMove) userInfo:nil repeats:YES];
[_timer setFireDate:[NSDate distantPast]];
}
-(void)UIViewMove
{
CGRect frame=_backView.frame;
NSLog(@"%f",frame.origin.y);
if (frame.origin.y==-48*10) {
frame.origin.y=0;
_backView.frame=frame;
}
else
{
frame.origin.y-=48;
[UIView animateWithDuration:0.5 animations:^{
_backView.frame=frame;
}];
}
}
4.基本概念
//对滚动方向加锁 YES:滚动时 只允许一个方向能够滚动(水平或垂直方向 只允许一个)
//NO 允许多个方向同时产生滚动效果
_scrollView.directionalLockEnabled = YES;
//设置滚动区域
//算出总行数
NSInteger totalRow = arr.count/3 + (arr.count%3 ==0 ? 0:1);
_scorllView.contentSize = CGSizeMake(_scorllView.frame.size.width, (space+150)*totalRow);
UIPageControl:继承自UIControl.事件驱动型控件
_pCtl = [[UIPageControl alloc]initWithFrame:CGRectMake(10, _sv.frame.origin.y + _sv.frame.size.height + 10, 300, 10)];
//1.设置总页数
_pCtl.numberOfPages = 4;
//2.设置当前页码
_pCtl.currentPage = 0;
//3.设置当前页码的颜色
_pCtl.currentPageIndicatorTintColor = [UIColor redColor];
//4.设置未选中的页码的颜色
_pCtl.pageIndicatorTintColor = [UIColor yellowColor];
[self.view addSubview:_pCtl];
//pageControl 触发的函数
- (void)pageClick:(UIPageControl *)pageControl {
//获取当前的页码pageControl.currentPage;
//这时要修改滚动视图的内容偏移量 滚动视图的内容就会滚动
//[_scrollView setContentOffset:CGPointMake(_scrollView.frame.size.width*pageControl.currentPage, 0) animated:YES];
//滚动到指定的可视子视图的范围
[_scrollView scrollRectToVisible:CGRectMake(_scrollView.frame.size.width*pageControl.currentPage, 0, _scrollView.frame.size.width, _scrollView.frame.size.height) animated:YES];
}
#pragma mark - UIScrollViewDelegate
//当滚动视图减速停止的时候 修改页码指示器的页码
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
//减速停止之后 获取滚动视图内容偏移量
CGPoint offset = scrollView.contentOffset;
//计算出当前页码:水平内容偏移量/滚动视图的宽度
UIPageControl *page = (UIPageControl *)[self.view viewWithTag:101];
page.currentPage = offset.x/scrollView.frame.size.width;
}
/*
- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated;
- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated;
//当用代码调用 上面两个方法并且开启动画效果 下面协议的方法才会调用
*/
- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
NSLog(@"滚动视图 改变偏移量 滚动动画结束");
}
5.代理协议
//常用1
- (UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView {
//返回滚动视图的第一张子视图 可以进行缩放
return scrollView.subviews[0];
}
//只要滚动视图滚动 就会调用的方法
//常用2
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// NSLog(@"正在滚动:%@",NSStringFromSelector(_cmd));
// //内容偏移量
// NSLog(@"offset :%@",NSStringFromCGPoint(scrollView.contentOffset));
}
//常用3
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
NSLog(@"将要拖拽的时候调用:%@",NSStringFromSelector(_cmd));
}
//常用4
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
NSLog(@"将要结束拖拽(手指拖拽离开)调用:%@",NSStringFromSelector(_cmd));
}
//常用5
//已经结束 拖拽调用
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"已经结束拖拽%@",NSStringFromSelector(_cmd));
}
//常用6
//手指离开屏幕 减速开始的时候调用
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView {
NSLog(@"减速开始:%@",NSStringFromSelector(_cmd));
}
//常用7
//减速 到停止(静止) 的时候调用 ()
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
NSLog(@"减速停止:%@",NSStringFromSelector(_cmd));
}
/*
//是否可以滚动到滚动视图顶部(点击状态栏的时候)
_scrollView.scrollsToTop = YES; YES 的时候下面的方法才会有效
*/
- (void)scrollViewDidScrollToTop:(UIScrollView *)scrollView {
NSLog(@"滚动到滚动视图的顶部");
}
/*
_scrollView.scrollsToTop = YES;下面的方法才有效
*/
//代理来控制 点击状态栏是否可以 滚动到顶部
- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView {
return YES;//NO不可以 YES 可以
}
//将要开始缩放的时候调用
- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view {
NSLog(@"%@",NSStringFromSelector(_cmd));
}
//缩放结束的
- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(CGFloat)scale {
NSLog(@"%@",NSStringFromSelector(_cmd));
}
//缩放的时候调用 变形
- (void)scrollViewDidZoom:(UIScrollView *)scrollView {
NSLog(@"缩放%@",NSStringFromSelector(_cmd));
}
5.循环滚动
- (void)creatScrollView {
_scrollView = [[UIScrollView alloc] initWithFrame:self.view.bounds];
//粘贴图片 实现循环滚动
// 1 2 3 4 5 第五张 再向后切换 应该切换第一张
//这时 我们需要准备7张图片
//并排 显示 5 1 2 3 4 5 1
for (int i = 0; i < 7; i++) {
NSString *path = nil;
if (i == 0) {//
path = [[NSBundle mainBundle] pathForResource:@"5" ofType:@"jpg"];
}else if (i == 6){
path = [[NSBundle mainBundle] pathForResource:@"1" ofType:@"jpg"];
}else {
path = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat:@"%d",i] ofType:@"jpg"];
}
UIImage *image = [UIImage imageWithContentsOfFile:path];
UIImageView *imageview = [[UIImageView alloc] initWithFrame:CGRectMake(_scrollView.frame.size.width*i, 0, _scrollView.frame.size.width, _scrollView.frame.size.height)];
imageview.image = image;
//粘贴到滚动视图
[_scrollView addSubview:imageview];
[imageview release];
}
//设置内容 滚动范围
_scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width*7, _scrollView.frame.size.height);
_scrollView.showsHorizontalScrollIndicator = NO;
_scrollView.showsVerticalScrollIndicator = NO;
_scrollView.bounces = NO;
//设置内容偏移量 偏移到实际的第一张
_scrollView.contentOffset = CGPointMake(_scrollView.frame.size.width, 0);
//按页滚动
_scrollView.pagingEnabled = YES;
//设置代理
_scrollView.delegate = self;
[self.view addSubview:_scrollView];
}
//当减速停止的时候 来进行判断是否偏移量移动到了 第0张或者第6张
- (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
// 5 1 2 3 4 5 1
//获取当前的偏移量
CGPoint offset = scrollView.contentOffset;
if (offset.x == 0) {//判断水平方向的偏移量 是否是第0张
//修改偏移量 使移动到 实际的第5张
scrollView.contentOffset = CGPointMake(5*scrollView.frame.size.width, 0);
}else if(offset.x == 6*scrollView.frame.size.width) {//或者 第6张
//修改偏移量 移动到实际的第1张
//不带动画的修改
scrollView.contentOffset =CGPointMake(1*scrollView.frame.size.width, 0);
}
}