Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >如何制作无限UIScrollView?

如何制作无限UIScrollView?
EN

Stack Overflow用户
提问于 2015-02-22 22:18:55
回答 2查看 840关注 0票数 5

我使用this codeUIScrollView中创建重用视图,它工作得很好。您知道如何在UIScrollView中使用重用子视图使代码无限滚动吗?

代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
#pragma mark 
#pragma mark - SCROLL VIEW DELEGATE METHOD
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
             [self setNeedsLayout];

            int currentPosition = floor(scrollView.contentOffset.x);
            currentPage = MAX(0,floor(currentPosition / scrollView.frame.size.width));

            if(currentPage != refPage)
            {
                refPage = currentPage;
                if ([arrQLst count] > 0)
                {
                    [self replaceHiddenView];
                }
            }
        }
           - (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
        {
            if ([arrQLst count] > 0)
            {
                [self replaceHiddenView];
            }
        }
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=
 -(void)replaceHiddenView
    {
        const double pageWidth =self.frame.size.width;
        NSInteger currentIndex;

        currentIndex = (([self getScrollView].contentOffset.x - pageWidth) / pageWidth) + 1;

        RandomView *currentView = nil;
        RandomView *previousView = nil;
        RandomView *nextView = nil;

        if (CGRectContainsPoint(objRandom1.frame, [self getScrollView].contentOffset))
        {
            currentView = objRandom1;
            previousView = objRandom2;
            nextView = objRandom3;
        }
        else if (CGRectContainsPoint(objRandom2.frame, [self getScrollView].contentOffset))
        {
            currentView = objRandom2;
            previousView = objRandom1;
            nextView = objRandom3;
        }
        else
        {
            currentView = objRandom3;
            previousView = objRandom1;
            nextView = objRandom2;
        }

        currentView.frame = CGRectMake(self.frame.size.width * currentIndex, 0.0, self.frame.size.width, self.frame.size.height);
        [currentView setQuestionData:[arrQLst objectAtIndex:currentIndex]];

        // Now move the other ones around
        // and set them ready for the next scroll
        if (currentIndex < [arrQLst count] - 1)
        {
            nextView.frame = CGRectMake(self.frame.size.width * (currentIndex + 1), 0.0, self.frame.size.width, self.frame.size.height);
            [nextView setQuestionData:[arrQLst objectAtIndex:(currentIndex + 1)]];
        }

        if (currentIndex >= 1)
        {
            previousView.frame = CGRectMake(self.frame.size.width * (currentIndex - 1), 0.0, self.frame.size.width, self.frame.size.height);
            [previousView setQuestionData:[arrQLst objectAtIndex:(currentIndex - 1)]];
        }

        if([arrQLst count] > 0)
            [self checkForRequestForLoadMore:currentIndex];
     }

    -(void)displayViewAtIndex:(NSInteger)index
    {
        @try
        {
            NSInteger count = [arrQLst count];
            if (index >= 0 && index < count)
            {
                Ques *objQ = [arrQLst objectAtIndex:index];
                objRandom1.frame = CGRectMake(self.frame.size.width * index, 0.0,self.frame.size.width,self.frame.size.height);
                [objRandom1 setQuestionData:objQ];
                [[self getScrollView] scrollRectToVisible:CGRectMake(self.frame.size.width * index, 0.0, self.frame.size.width, self.frame.size.height) animated:NO];

                if (index < (count - 1))
                {
                    objQ = [arrQLst objectAtIndex:(index + 1)];
                    objRandom2.frame = CGRectMake(self.frame.size.width * (index + 1), 0.0, self.frame.size.width, self.frame.size.height);
                    [objRandom2 setQuestionData:objQ];
                }

                if (index > 0)
                {
                    objQ = [arrQLst objectAtIndex:(index - 1)];
                    objRandom3.frame = CGRectMake(self.frame.size.width * (index - 1), 0.0, self.frame.size.width, self.frame.size.height);
                    [objRandom3 setQuestionData:objQ];
                }
            }
        }
        @catch (NSException *exception)
        {
            NSLog(@"displayViewAtIndex Exception %s",__PRETTY_FUNCTION__);
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-02-27 05:04:42

最后,在上面的code.Here中找到解决方案并创建无限滚动视图,我们使用相同的代码为视图设置框架。

代码:

//在这里,我在数组的第一个索引和最后一个索引中添加了两个虚拟数据,在第一个位置添加了最后一个对象,最后添加了arrData.When数据集的第一个对象,那时我们创建了第一个对象和最后一个对象的两个虚拟数据。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        if ([arrQLst count] > 1)
        {
            [arrQLst insertObject:[arrQLst lastObject] atIndex:0];
            [arrQLst addObject:[arrQLst objectAtIndex:1]];
        }
        //end
        [self setContentSizeOfScrollView];

-==-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {

    [self setNeedsLayout];

    int currentPosition = floor(scrollView.contentOffset.x);
    currentPage = MAX(0,floor(currentPosition / scrollView.frame.size.width));

    if(currentPage != refPage)
    {
        refPage = currentPage;
        if ([arrQLst count] > 0)
        {
            [self replaceHiddenView];
        }
    }


   if (scrollView.contentOffset.x <= 0.0)
    {
        if ([arrQLst count] > 1)
        {
            [self displayViewAtIndex:([arrQLst count]-2)];
        }
    }
    else if (scrollView.contentOffset.x > (scrollView.frame.size.width * ([arrQLst count] - 1)))
    {
        if ([arrQLst count] > 1)
        {
            [self displayViewAtIndex:1];
        }
    }
}
票数 2
EN

Stack Overflow用户

发布于 2015-02-22 22:41:38

下面是如何生成无限滚动视图的方法。这个应用程序使用可可豆,你必须从终端下载。Github有许多令人敬畏的开源框架,可以在您完成任务时跟上您的想法。https://github.com/pronebird/UIScrollView-InfiniteScroll

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28667902

复制
相关文章
Angularjs基础(六)
AngularJS HTML DOM     AngularJS为HTML DOM 元素的属性提供了绑定应用数据的指令。 ng-disabled指令     ng-disabled指令直接绑定应用数据到HTML的disabled属性。       实例:       <div ng-app="" ng-init="mySwitch=true">         <p>           <button ng-disableled="mySwitch">点我!</button
用户1197315
2018/01/19
3K0
什么是 503 服务不可用错误?
浏览网页时最常见的错误之一是“503 服务不可用错误”,此消息表明 Web 服务器遇到技术问题并且无法处理请求。
网络技术联盟站
2022/03/16
7.5K0
什么是 503 服务不可用错误?
【AngularJS】—— 8 自定义指令
AngularJS支持用户自定义标签属性,在不需要使用DOM节点操作的情况下,添加自定义的内容。 前面提到AngularJS的四大特性:   1 MVC   2 模块化   3 指令   4 双向数据绑定 下面将会介绍如下的内容: 1 如何自定义指令   2 自定义指令的使用   3 自定义指令的内嵌使用   如何自定义指令:   Angular是基于模块的框架,因此上来肯定要创建一个自己的模块: var myAppModule = angular.module("myApp",[
用户1154259
2018/01/17
8210
【AngularJS】—— 8 自定义指令
AngularJS 模块
你可以通过 AngularJS 的 angular.module 函数来创建模块:
陈不成i
2021/07/23
1.9K0
AngularJS基础入门初探
  (2)由Misko Hevery 等人创建,2009年被Google所收购,用于其多款产品
Edison Zhou
2018/08/20
1.8K0
AngularJS基础入门初探
AngularJS API之bootstrap启动
对于一般的使用者来说,AngularJS的ng-app都是手动绑定到某个dom元素。但是在一些应用中,这样就显得很不方便了。 绑定初始化 通过绑定来进行angular的初始化,会把js代码侵入到html中,但是对于新手使用来说,还是足够了! <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script src="http://apps.bdimg.com/libs/
用户1154259
2018/01/17
6880
第215天:Angular---指令
在 AngularJS 中将前缀为 ng- 这种属性称之为指令,其作用就是为 DOM 元素调用方法、定义行为绑定数据等
半指温柔乐
2018/09/11
3.2K0
第218天:Angular---模块和控制器
所有需要ng管理的代码必须被包裹在一个有ng-app指令的元素中 ng-app是ng的入口,表示当前元素的所有指令都会被angular管理(对每一个指令进行分析和操作)
半指温柔乐
2018/09/11
6910
Angular.js学习笔记 (二)
用A链接对象解析url的组成 var url = 'https://www.baidu.com:8080/aaa/1.html?id=10#name'; var aLink
HUC思梦
2020/09/03
1.2K0
Angular.js学习笔记(三)
1、uppercase,lowercase 大小写转换 {{ "lower cap string" | uppercase }} // 结果:LOWER CAP STRING {{ "TANK is GOOD" | lowercase }} // 结果:tank is good 2、date 格式化 {{1490161945000 | date:"yyyy-MM-dd HH:mm:ss"}} // 2017-03-22 13:52:25 3、number 格式化(保留小数) {{149016.1945000 | number:2}}//保留两位 {{149016.1945000 | number}}//默认为保留3位 4、currency货币格式化 {{ 250 | currency }} // 结果:$250.00 {{ 250 | currency:"RMB ¥ " }} // 结果:RMB ¥ 250.00 5、filter查找 输入过滤器可以通过一个管道字符(|)和一个过滤器添加到指令中,该过滤器后跟一个冒号和一个模型名称。 filter 过滤器从数组中选择一个子集 // 查找name为iphone的行 {{ [{"age": 20,"id": 10,"name": "iphone"}, {"age": 12,"id": 11,"name": "sunm xing"}, {"age": 44,"id": 12,"name": "test abc"} ] | filter:{'name':'iphone'} }} 同时filter可以自定义比较函数。 6、limitTo 截取 {{"1234567890" | limitTo :6}} // 从前面开始截取6位 {{"1234567890" | limitTo :6,6}} // 从第6位开始截取6位 {{"1234567890" | limitTo:-4}} // 从后面开始截取4位 7、orderBy 排序 // 根据id降序排 {{ [{"age": 20,"id": 10,"name": "iphone"}, {"age": 12,"id": 11,"name": "sunm xing"}, {"age": 44,"id": 12,"name": "test abc"} ] | orderBy:'id':true }}
HUC思梦
2020/09/03
8.2K0
(4)Angular的开发
angular框架,库,是一款非常优秀的前端高级JS框架,有了这个框架就可以轻松构建SPA应用程序,通过指令宽展了HTML,通过表达式绑定数据到HTML。
达达前端
2019/07/22
3.1K0
Angular.js学习笔记 (一)
- angular中最重要的概念是指令(directive) - ng-model 是双向数据绑定的指令,效果就是将当前元素的value属性和模型中的[user.name]建立绑定关系 ### 模块(Module) - 我们可以通过angular.module创建一个模块 - angular.module方法传递两个参数才是创建模块,一个参数是获取模块 ### 控制器(Controller)
HUC思梦
2020/09/03
1.6K0
7-进军 angular1.x 表单和事件、模块
通常 AngularJS 应用程序将模块和控制器包含在 JavaScript 文件中。
西南_张家辉
2021/02/02
2.3K0
【AngularJS】—— 12 独立作用域
前面通过视频学习了解了指令的概念,这里学习一下指令中的作用域的相关内容。 通过独立作用域的不同绑定,可以实现更具适应性的自定义标签。借由不同的绑定规则绑定属性,从而定义出符合更多应用场景的标签。 本篇将会总结下面的内容:   1 为何需要独立作用域   2 如何实现独立作用域   3 作用域的数据绑定 之前有一些错误,是由于replace拼写错误导致的。 拼写正确后,网友发现报错,无法正常工作。这是因为模板中存在单标签<br>,导致模板无法正确解析~ 再次感谢博友们提出的错误! 独立作
用户1154259
2018/01/17
1.4K0
【AngularJS】—— 12 独立作用域
angularjs学习第一天笔记
    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/08/30
2.2K0
angularjs学习第一天笔记
angularjs学习第一天笔记
    您好,我是一名后端开发工程师,由于工作需要,现在系统的从0开始学习前端js框架之angular,每天把学习的一些心得分享出来,如果有什么说的不对的地方,请多多指正,多多包涵我这个前端菜鸟,欢迎大家的点评与赐教。谢谢!
小小许
2018/09/20
2.1K0
11-angular 实例学习-2
一些重要的 demo dropList <div ng-app="myApp" ng-controller="myCtrl" > <select ng-model="adStyle" ng-change="look();" > <option value="0">全部广告类型option> <option value="1">图片广告option> <option value="2">图音视广告op
西南_张家辉
2021/02/02
2.2K0
第214天:Angular 基础概念
  + https://github.com/angular/angular.js/releases
半指温柔乐
2018/09/11
1.9K0
【AngularJS】—— 7 模块化
AngularJS有几大特性,比如:   1 MVC 2 模块化   3 指令系统   4 双向数据绑定 那么本篇就来看看AngularJS的模块化。   首先先说一下为什么要实现模块化:   1 增加了模块的可重用性   2 通过定义模块,实现加载顺序的自定义   3 在单元测试中,不必加载所有的内容   之前做的几个例子,控制器的代码直接写在script标签里面,这样声明的函数都是全局的,显然不是一个最好的选择。   下面看看如何进行模块化: <script type=
用户1154259
2018/01/17
5150
【AngularJS】—— 7 模块化
angularjs学习第六天笔记(指令简介学习)
  您好,由于周末有事情,没哟学习angularjs,几天晚上开始继续学习angularjs,坚持加油每一天。谢谢
小小许
2018/09/20
5400

相似问题

模块“MyApp”不可用

21

Angular.js:未捕获错误,无模块: myapp

60

未捕获的错误:模块'myApp‘不可用!(AngularJS)

30

“模块'myapp‘不可用”,引导崩溃

12

错误:[$injector:nomod]模块'myApp.view1‘不可用

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文