利用scrollView实现拖动一段距离,显示下方更多详情

原创 2015年07月08日 10:09:02

#define SCREEN_WIDTH     [[UIScreen mainScreen] bounds].size.width

#define SCREEN_HEIGHT    [[UIScreen mainScreen] bounds].size.height

#import "ViewController.h"

@interface ViewController ()

{

    float lastContentOffsetY;

    UIImageView * tipImageView;

    UILabel * tipLabel;

}


@end


@implementation ViewController


- (void)viewDidLoad {

    [super viewDidLoad];

    // Do any additional setup after loading the view, typically from a nib.

    //创建对象,设置代理,容量

    UIScrollView * backScrollView = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT)];

    backScrollView.delegate = self;

    backScrollView.contentSize = CGSizeMake(SCREEN_WIDTH, SCREEN_HEIGHT*2);

    [self.view addSubview:backScrollView];

    //提示的view

    UIView * tipView = [[UIView alloc]initWithFrame:CGRectMake(0, SCREEN_HEIGHT - 50, SCREEN_WIDTH, 50)];

    tipView.backgroundColor = [UIColor grayColor];

    [backScrollView addSubview:tipView];

    //提示的文字

    tipLabel = [[UILabel alloc]initWithFrame:CGRectMake(0, 0, 200, 30)];

    tipLabel.text = @"向上拖动阅读更多";

    tipLabel.center = CGPointMake(tipView.center.x+100, 25);

    [tipView addSubview:tipLabel];

    //提示的箭头

    tipImageView = [[UIImageView alloc]initWithFrame:CGRectMake(0, 0, 50, 50)];

    tipImageView.center = CGPointMake(tipView.center.x-25, 25);

    tipImageView.image = [UIImage imageNamed:@"11.jpg"];

    [tipView addSubview:tipImageView];


}

#pragma mark--------------scrollView代理方法

-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView

{

    //获取刚刚开始点击的y偏移量  为了比较是向上还是向下拖动

    lastContentOffsetY = scrollView.contentOffset.y;

}

//一直调用这个方法,实时获取偏移量

-(void)scrollViewDidScroll:(UIScrollView *)scrollView

{

    if (lastContentOffsetY <= scrollView.contentOffset.y)

    {

      if (scrollView.contentOffset.y>50)

      {

          tipLabel.text = @"松手查看详情";

          [self makeTheAnimationWithLayer:tipImageView.layer withBOOl:TRUE];

      }else

      {

          tipLabel.text = @"向上拖动阅读更多";

          [self makeTheAnimationWithLayer:tipImageView.layer withBOOl:FALSE];

      }

    }

    else

    {

        //向下拖拽的情况

        if (SCREEN_HEIGHT - scrollView.contentOffset.y>50)

        {

            [self makeTheAnimationWithLayer:tipImageView.layer withBOOl:FALSE];

            tipLabel.text = @"松手查看详情";

        }else

        {

           tipLabel.text = @"下拉查看上方信息";

            [self makeTheAnimationWithLayer:tipImageView.layer withBOOl:TRUE];

        }

    }

    

}

//结束拖拽后的调用

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

{


    if (lastContentOffsetY < scrollView.contentOffset.y)

    {

        //向上拖拽的情况

        if (scrollView.contentOffset.y>50)

        {

            [UIView animateWithDuration:0.4 animations:^{

                scrollView.contentOffset = CGPointMake(0, SCREEN_HEIGHT);

            } completion:^(BOOL finished) {

                //完成动画后,将tiplabel更改

                tipLabel.text = @"下拉查看上方信息";

            }];

        }else

        {

            [UIView animateWithDuration:0.2 animations:^{

                scrollView.contentOffset = CGPointMake(0, 0);

            } completion:^(BOOL finished) {

            }];

        }

    }

    else

    {

        //向下拖拽的情况

        if (SCREEN_HEIGHT - scrollView.contentOffset.y>50)

        {

            

            [UIView animateWithDuration:0.4 animations:^{

                scrollView.contentOffset = CGPointMake(0, 0);

            } completion:^(BOOL finished) {

               tipLabel.text = @"向上拖动阅读更多";

            }];

            

        }else

        {

            [UIView animateWithDuration:0.2 animations:^{

                scrollView.contentOffset = CGPointMake(0, SCREEN_HEIGHT);

            } completion:^(BOOL finished) {


            }];

        }

    }

  

}

#pragma mark----------做动画

//箭头翻转的动画

-(void)makeTheAnimationWithLayer:(CALayer *)layer withBOOl:(BOOL )rotate

{

    CABasicAnimation *anima=[CABasicAnimation animationWithKeyPath:@"transform"];

    //1.1设置动画执行时间

    anima.duration=1.0;

    //1.2修改属性,执行动画

    if (rotate == FALSE)

    {

        anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(0, 0, 0, 1)];

    }else

    {

        anima.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeRotation(M_PI, 0, 0, 1)];

    }

    //1.3设置动画执行完毕后不删除动画

    anima.removedOnCompletion=NO;

    //1.4设置保存动画的最新状态

    anima.fillMode=kCAFillModeForwards;

    //2.添加动画到layer

    [layer addAnimation:anima forKey:nil];

}

- (void)didReceiveMemoryWarning {

    [super didReceiveMemoryWarning];

    // Dispose of any resources that can be recreated.

}


@end


相关文章推荐

【SSH总结】学完SSH到学通SSH还有一段距离

Java应用的学习从今年年初的DRP项目学习开始的,从最初的J2SE到J2EE,再到现在的SSH框架学习。这也应该是自己接触编程以来研究和接触时间比较长的一类语言,从这里我也了解到了做企业级大型应用系...
  • lfsfxy9
  • lfsfxy9
  • 2011年07月26日 22:49
  • 1726

ul与body之间多出一段距离怎么办

这个是我学校上机题目,不要以为是什么高大上的东西我只是小白一个而已,记录希望帮助到别人; 学院首页 学院简介 教师队...

利用ScrollView滑动属性实现点击查看更多

利用ScrollView的滚动实现点击查看更多 效果图 更新内容布局

scrollView嵌套webview+listview listview显示不全 上拉listview加载更多

scrollView嵌套webview+listview listview加载item过多时显示不全 上拉listview加载更多 透明状态栏 软键盘弹出把某一控件顶上去...

scrollView嵌套的listview里又嵌套了GridView,实现下拉刷新和加载更多(附源码)亲测可用

ScrollView嵌套ListView/GridView显示不全的问题,重写ListView/GridView的onMeasue()方法即可。 ListView里如果又嵌套了GridView,重写G...

Android scrollview中嵌套listview实现listview的下拉刷新上拉加载更多

在Android中 scrollview中嵌套listview实现listview的下拉刷新上拉加载更多

android:ScrollView滑动到底部显示加载更多

这是效果 主要是onTouchListener监听事件,监视什么时候滑到底部 同时要理解getMeasuredHeight和getHeight的区别 getMeasuredHeight:全部...

iOS新闻客户端开发教程8-加载更多和新闻详情

今天介绍下iOS新闻客户端App的2个功能点的开发:新闻列表加载更多 和 新闻详情页。新闻列表加载更多1.新建加载更多的单元格Cell,NewsMoreCell.xib 拖拽Label和Loadin...
  • JaCman
  • JaCman
  • 2015年12月05日 21:41
  • 1378
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:利用scrollView实现拖动一段距离,显示下方更多详情
举报原因:
原因补充:

(最多只允许输入30个字)