• iOS中scrollview自动滚动的实现


    http://bbs.csdn.net/topics/390347330

    原问题是,我要展现给用户的内容放在scrollview中,让内容从上到底自动滚动,我最开始用的是DDAutoscrollview,但是无法实现。

    一种解决方案见下边,更多解决方案见:http://ask.csdn.net/questions/374

    .h文件

    Objective C code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
     @interface Interface1 : UIViewController {
     
        IBOutlet UIScrollView *scroller;
        IBOutlet UILabel *warnung;
     
    }
     
     
    @property (nonatomicretainIBOutlet UIScrollView* scrollView;


    .m文件

    Objective C code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
        CGPoint bottomOffset = CGPointMake(self.scrollView.contentOffset.x, self.scrollView.contentSize.height - self.scrollView.bounds.size.height);
        [self.scrollView setContentOffset:bottomOffset animated:NO];
     
        CGPoint newOffset = self.scrollView.contentOffset;
        newOffset.y = 0;
        [self.scrollView setContentOffset:newOffset animated:YES];
    }
     
    - (void)viewDidLoad
    {
     
        [scroller setScrollEnabled:YES];
        [scroller setContentSize:CGSizeMake(320, 420)];
     
            [super viewDidLoad];
    }



    使用setContentOffset:animated:

    Objective C code
    ?
    1
    2
    3
    4
    UIScrollView *scrollView = ...;
    CGPoint newOffset = scrollView.contentOffset;
    newOffset.y = 0;
    [scrollView setContentOffset:newOffset animated:YES];




    如果需要开场动画的效果,在scrollView的viewcontroller实现

    Objective C code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    - (void)viewDidLoad
    {
        [super viewDidLoad];
     
        // ...
     
        CGPoint bottomOffset = CGPointMake(self.scrollView.contentOffset.x, self.scrollView.contentSize.height - self.scrollView.bounds.size.height);
        [self.scrollView setContentOffset:bottomOffset animated:NO];
    }
    - (void)viewDidAppear:(BOOL)animated
    {
        [super viewDidAppear:animated];
     
        CGPoint newOffset = self.scrollView.contentOffset;
        newOffset.y = 0;
        [self.scrollView setContentOffset:newOffset animated:YES];
    }




    移动的慢点,用timer实现:

    Objective C code
     
    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    - (void)viewDidLoad
    {
        [super viewDidLoad];
     
        // ...
     
        CGPoint bottomOffset = CGPointMake(self.scrollView.contentOffset.x, self.scrollView.contentSize.height - self.scrollView.bounds.size.height);
        [self.scrollView setContentOffset:bottomOffset animated:NO];
    }
     
     
    - (void)viewDidAppear:(BOOL)animated
    {    
        [super viewDidAppear:animated];
     
        CGPoint bottomOffset = CGPointMake(self.scrollView.contentOffset.x, self.scrollView.contentSize.height - self.scrollView.bounds.size.height);
     
        //设置延迟时间
        float scrollDurationInSeconds = 4.0;
     
        //计算timer间隔
     
     
        float totalScrollAmount = bottomOffset.y;
        float timerInterval = scrollDurationInSeconds / totalScrollAmount;
     
        [NSTimer scheduledTimerWithTimeInterval:timerInterval target:self selector:@selector(scrollScrollView:) userInfo:nil repeats:YES];
    }
     
    - (void)scrollScrollView:(NSTimer *)timer
    {
        CGPoint newScrollViewContentOffset = self.scrollView.contentOffset;
     
        //向上移动 1px
        newScrollViewContentOffset.y -= 1;
     
     
        newScrollViewContentOffset.y = MAX(0, newScrollViewContentOffset.y);
     
        //如果到顶了,timer中止
        if (newScrollViewContentOffset.y == 0) {
            [timer invalidate];
        }
     
        //最后设置scollView's contentOffset
        self.scrollView.contentOffset = newScrollViewContentOffset;
    }
  • 相关阅读:
    家庭记账本---开发进度1
    HDOJ 1004--Let the Balloon Rise
    DP HDIJ1421 搬宿舍
    动态规划之最长公共子序列
    和最大的子序列之二
    和最大的子序列之一
    动态规划之一最长上升子序列LIS
    动态规划之一数塔
    动态规划之一ones
    动态规划实例
  • 原文地址:https://www.cnblogs.com/geek6/p/4044757.html
Copyright © 2020-2023  润新知