UIScorlView 循环滚动

- (void) createAdScrollView
{
    _view = [[UIView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 150)];
    [self.view addSubview:_view];
    _scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0, 0, WIDTH, 150)];
    _scrollView.delegate = self;
    // 设置scrollView的contentSize
    _scrollView.contentSize = CGSizeMake(WIDTH*(self.scrollViewDataArray.count+1), 0);
    _scrollView.pagingEnabled = YES;
    _scrollView.delegate = self;

    // 注意这里不需要add,因为在headerView时直接return _scrollView;
     [_view addSubview:_scrollView];

    for (int i=0; i<self.scrollViewDataArray.count+1; i++) {
        int y = i;
        if (y == self.scrollViewDataArray.count) {
            y = 0;
        }
        UIButton *button = [ZCControl createButtonWithFrame:CGRectMake(WIDTH*i, 0, WIDTH, 150) title:nil imageName:nil bgImageName:nil target:self method:@selector(buttonClick:)];
//        [button sd_setBackgroundImageWithURL:[NSURL URLWithString:self.scrollViewDataArray[y][@"image_path"]] forState:UIControlStateNormal]; placeholderImage:[UIImage imageNamed:@"recommend_Face"];
        button.tag = 100+i;
        [_scrollView addSubview:button];
    }
    // 添加定时器
    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(timerClick) userInfo:nil repeats:YES];

    // 添加小白点
    pageController = [[UIPageControl alloc]initWithFrame:CGRectMake(100, 120, 100, 30)];
    pageController.numberOfPages = self.scrollViewDataArray.count;

    // 白色看不清设置成其他颜色
    pageController.pageIndicatorTintColor = [UIColor grayColor];

    // pageController虽然是和scrollView并用的,但是并不加载在sc
    [_view addSubview:pageController];

    // kvo观察者模式,负责观察某一个对象其中某一个值的变化,如果有新值变化就通知你。需要注意的是,观察者模式需要手动销毁,当前界面销毁并不代表观察者模式也销毁了
    // sc观察的对象,self为响应的对象,path为观察sc其中的一个属性,使用字符串来表示这个属性,要求与属性名保持一致。options为观察值变化为有新的变化的时候,通知我。context上下文

    [_scrollView addObserver:self forKeyPath:@"contentOffset" options:NSKeyValueObservingOptionNew context:nil];
}
- (void)timerClick{
    // 首先判断_scrollView当前的偏移
    CGPoint point = _scrollView.contentOffset;
    point.x = point.x+WIDTH;

    [UIView animateWithDuration:1 animations:^{
        _scrollView.contentOffset = point;
    }completion:^(BOOL finished) {
        CGPoint point1 = _scrollView.contentOffset;
        if (_scrollView.contentOffset.x/WIDTH == self.scrollViewDataArray.count) {
            _scrollView.contentOffset = CGPointZero;
        }
    }];
}
- (void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context
{
    // keyPath为观察的那个key也就是属性,object为观察的的那个对象,change为变化的值
    int x = _scrollView.contentOffset.x/320;
    pageController.currentPage = x;
}
时间: 2024-10-15 18:10:39

UIScorlView 循环滚动的相关文章

循环滚动图片

1.概述 循环滚动图片,不仅可以增添Web页面的动态效果,而且可以节省页面空间,有效地保证在有限的页面中显示更多的图片. 2.技术要点 主要应用setTimeout()方法实现图片的循环滚动效果.setTimeout()方法的语法格式如下: setTimeout(function,milliseconds,[arguments]) 参数说明: a. function:要调用的JavaScript自定义函数名称. b. Milliseconds:设置超时时间(以毫秒为单位). 功能:经过超时时间后

【Android】ViewPager实现无限循环滚动

最近做的一个项目,客户要求在ViewPager实现的主页面中滑动到最后一页后继续滑动能返回到第一页,也就是实现无限循环滚动,效果如下: 看了下ViewPager没有滑到尽头的回调方法,因此想到的解决方案是,在原来的最后一页之后再加上一个第一页,也就是原本有编号为a1,b,c的三个页面,现在在最后面再加一个a页面,变为a1.b.c.a2四个页面,然后使用OnPageChangeListener中的onPageSelected方法来监听到页面切换,当发现是从第三个页面(c)切换到第四个页面(a1)时

循环滚动scrollView---最后一张图片后面紧跟着第一张图片,第一张图片前面挨着最后一张图片

问题描述:循环滚动scrollView---最后一张图片后面紧跟着第一张图片,第一张图片前面挨着最后一张图片,形成环,循环切换图片. 效果图如下: 具体代码如下: //  ViewController.m #import "ViewController.h" #define kW 375 #define kH 500 #define kCount 11 @interface ViewController () <UIScrollViewDelegate> @end @imp

Swift - 多层无缝循环滚动背景(SpriteKit游戏开发)

在游戏开发中,比如跑酷游戏.我们需要实现背景的无限循环滚动,来营造运动的效果.除了单层的背景滚动,还有视差滚动. 视差滚动是指让多层背景以不同的速度移动,形成立体的效果,从而带来非常出色的视觉体验. 样例说明: 1,本样例背景分为两层.第一层更靠近游戏窗口的色彩更鲜艳,移动速度也更快一些.第二层由于要模拟远处的场景,所以颜色也更淡一些,对比度更弱一些,移动速度也更慢一些. 2,要实现循环滚动.我们准备的背景图首尾是要可以无缝衔接的. 3,判断需要多少张无缝衔接图来组成背景?判断标准是:当第一张图

封装scrollView 循环滚动,tableViewCell(连载) mvc

封装 封装 封装 ... 封装的重要性太重要了 给大家在送点干货 从一个项目中抽取出来的,和大家一起分享 封装scrollView 循环滚动,tableViewCell(连载) 明天还会更新 tableView 的封装 使用了mvc 设计模式 代码如下: // // GPMainController.m #import "GPMainController.h" #import "GPAdsView.h" #import "GPSubViewCell.h&q

JS实例——间歇循环滚动

间歇滚动:滚动一行后,延迟2秒后继续滚动 具体实现代码如下: 1 <!doctype html> 2 <html lang="en"> 3 <head> 4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 5 <meta name="keywords" content="关

css+jQuery制作的文字循环滚动代码

css+jQuery制作的文字循环滚动代码,尺寸只需要在css中调整即可,另外别忘记在function里面修改相关参数 百度网盘下载

简单图片循环滚动

<marquee style="margin-top:5px;" behavior="alternate" loop="1" onmousemove="stop()" onmouseout="start()"> <img src="Image/0.jpg" width="180px"; height="180px" /> &

js-间歇循环滚动

HTML部分: <!DOCTYPE html> <html> <head> <meta charset="gb2312"/> <title>间歇循环滚动</title> </head> <body> <div id="box"> <ul id="con1"> <li>111111111111</li> &