首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >使用scrollViewWillEndDragging进行自定义UIScrollView分页

使用scrollViewWillEndDragging进行自定义UIScrollView分页
EN

Stack Overflow用户
提问于 2012-02-20 19:58:59
回答 5查看 28.5K关注 0票数 24

我试图在iOS 5中使用新的scrollViewWillEndDragging:withVelocity:targetContentOffset: UIScrollView委托调用,但我似乎无法让它真正正确地响应我。我正在更改targetContentOffset->x的值,但它从未被使用过。我知道代码正在运行,因为它会命中该函数中的断点。我甚至尝试将偏移值设置为硬编码的数字,这样我就可以知道它将在哪里结束,但它永远不会起作用。

有没有人能够正确地使用它并使其工作?是否有其他必须实现的委托调用才能正常工作?

这是我的代码,以防有人发现它有问题:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
    // goodOffsetX returns the contentOffset i want the scrollView to stop at
    CGFloat goodOffsetX = [self _horizontalContentOffsetForTargetHorizontalContentOffset:(*targetContentOffset).x velocity:velocity.x];

    NSLog( @" " );
    NSLog( @"scrollViewWillEndDragging" );
    NSLog( @"   velocity: %f", velocity.x );
    NSLog( @"   currentX: %f", scrollView.contentOffset.x );
    NSLog( @"   uikit targetX: %f", (*targetContentOffset).x );
    NSLog( @"   pagedX: %f", goodOffsetX );

    targetContentOffset->x = goodOffsetX; 
}
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-06-21 07:55:46

您可以使用以下代码实现自定义分页:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (float) pageWidth {
    return ((UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout).itemSize.width +
    ((UICollectionViewFlowLayout*)self.collectionView.collectionViewLayout).minimumInteritemSpacing;
}

- (void) scrollViewWillBeginDragging:(UIScrollView *)scrollView {

    CGFloat pageWidth = self.collectionView.frame.size.width + 10 /* Optional Photo app like gap between images. Or use [self pageWidth] in case if you want the next page be also visible */;

    _currentPage = floor((self.collectionView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;

    NSLog(@"Dragging - You are now on page %i", _currentPage);
}

- (void) scrollViewWillEndDragging:(UIScrollView*)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint*)targetContentOffset {

    CGFloat pageWidth = self.collectionView.frame.size.width + 10; // [self pageWidth]

    int newPage = _currentPage;

    if (velocity.x == 0) { // slow dragging not lifting finger
        newPage = floor((targetContentOffset->x - pageWidth / 2) / pageWidth) + 1;
    }
    else {
        newPage = velocity.x > 0 ? _currentPage + 1 : _currentPage - 1;

        if (newPage < 0)
            newPage = 0;
        if (newPage > self.collectionView.contentSize.width / pageWidth)
            newPage = ceil(self.collectionView.contentSize.width / pageWidth) - 1.0;
    }

    NSLog(@"Dragging - You will be on %i page (from page %i)", newPage, _currentPage);

    *targetContentOffset = CGPointMake(newPage * pageWidth, targetContentOffset->y);
}

当然,您必须设置pagingEnabled = NO。_currentPage是一个iVar类。感谢http://www.mysamplecode.com/2012/12/ios-scrollview-example-with-paging.html为我们指明了正确的方向。

票数 54
EN

Stack Overflow用户

发布于 2017-02-08 15:25:51

SWIFT 3

这里有一个演示https://github.com/damienromito/CollectionViewCustom

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
func scrollViewWillEndDragging(_ scrollView: UIScrollView, withVelocity velocity: CGPoint, targetContentOffset: UnsafeMutablePointer<CGPoint>) {

    let pageWidth = Float(itemWidth + itemSpacing)
    let targetXContentOffset = Float(targetContentOffset.pointee.x)
    let contentWidth = Float(collectionView!.contentSize.width  )
    var newPage = Float(self.pageControl.currentPage)

    if velocity.x == 0 {
        newPage = floor( (targetXContentOffset - Float(pageWidth) / 2) / Float(pageWidth)) + 1.0
    } else {
        newPage = Float(velocity.x > 0 ? self.pageControl.currentPage + 1 : self.pageControl.currentPage - 1)
        if newPage < 0 {
            newPage = 0
        }
        if (newPage > contentWidth / pageWidth) {
            newPage = ceil(contentWidth / pageWidth) - 1.0
        }
    }
    let point = CGPoint (x: CGFloat(newPage * pageWidth), y: targetContentOffset.pointee.y)
    targetContentOffset.pointee = point
}
票数 9
EN

Stack Overflow用户

发布于 2012-05-13 03:35:24

我能够运行一个快速测试,并让它正确地触发,并使我的对象停止所需的。我使用以下简单的测试完成了这项工作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
     targetContentOffset->x = scrollView.contentOffset.x - 10;    
}

看起来这个方法可能不是你代码中的问题,但它更有可能是你的'goodOffsetX‘没有正确地计算一个有效的值来停止。

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

https://stackoverflow.com/questions/9367600

复制
相关文章
在restful api模式上使用JWT
在header头里面增加Authorization。在服务端验证的时候回通过取得这个值来验证回话的有效。
友儿
2022/09/11
8390
怎样使用React Context API [每日前端夜话0x26]
React Context API 【https://reactjs.org/docs/context.html】现在已经成为一个实验性功能,但是只有在 React 16.3.0 【https://reactjs.org/blog/2018/03/29/react-v-16-3.html】中才能用在生产中。本文将向你展示两个基本的 Web 商店应用程序,一个使用了 Context API 进行构建,另一个则不用。
疯狂的技术宅
2019/03/27
9330
怎样使用React Context API [每日前端夜话0x26]
在ListView上使用自定义的Adapter
需要实现的东西是: 一个DataListViewAdapter,当进行如下调用时,就能在列表上显示出数据:
LeoXu
2018/08/15
9670
使用Termux在Android上运行SSH服务器
借助出色的Termux终端仿真器应用程序,您可以在Android上运行SSH服务器。
用户5005176
2021/08/10
4.6K0
MySql在服务器上使用问题的总结
服务器是Windows Server 2012,我自己安装了一个MySql数据库,然后一个Web程序和客户端程序都想访问数据库,但是遇到一堆问题。主要是我仍然坚持使用.net 2.0,挂接MySql.Data 6.7.4版本。解决后记录一下
用户1075292
2023/05/03
1.1K0
MySql在服务器上使用问题的总结
使用nodejs编写api接口并部署到服务器上
1、安装node环境,没有就去看上一篇文章 2、创建一个node项目, 新建一个目录文件,例node_proxy 3、在新建的node项目执行npm init, 文件会生成一个package.json的文件 目录:
小吕
2022/06/16
8K0
使用nodejs编写api接口并部署到服务器上
Asp.net web api部署在某些服务器上老是404
asp.net web api部署在Windows服务器上后,按照WebAPI定义的路由访问,老是出现404,但定义一个静态文件从站点访问,却又OK。
guokun
2020/09/03
2.2K0
jira-api使用(上)
在jira操作中有些联动需求,例如需要查询一些数据并展示,在自带的筛选器中只能做单项操作,没法将多种查询进行自定义展示。通过API将查询结果进行自定义编排展示。
陈不成i
2021/07/05
9000
生产上还在使用GOLDENGATE HANDLECOLLISIONS
经常有朋友遇到ogg数据不一致或者遇到ogg replicate进程abend,比如1403错误之类,然后排除原因,大部分出现问题都是配置问题(少数情况下是bug),会造成业务统计数据不准或者涉及金额更麻烦(大库就比较麻烦,尤其报表库,主库数据都删除,报表数据不准了,最后pk吧),ogg虽然入门相对简单,使用这些参数之前,一定了解作用以及什么场景下适合使用。另外hanlecollisions与allownoopdates配合使用时候,allownoopdates作用失效.
徐靖
2020/08/05
8420
生产上还在使用GOLDENGATE HANDLECOLLISIONS
分享下 Backbone、Vue、Angular、React 在项目上的使用经验
上周,知乎上有几篇关于 Angular 和 Vue 对比的文章。本来想着的是,这些文章倒是可以指导下新手,作一些技术选型。可遗憾的是,开始的文章失去了一些偏颇,后面的文章则开始了一些攻击性行为。慢慢的,整个知乎上便是充满了一些戾气,开始了无尽的网络暴力。 于是,我想分享一下之前使用这些 MV* 框架的经验。 前端的摩尔时代 同样吧,在上周结束了《Expert Angular》的审校,这是第三本为 Packt 出版社审校的 Angular 的书。然后,先让我来讲个故事:一年前我开始审校的这本书,当时是基于 A
Phodal
2018/01/29
2.2K0
在以太坊上构建 GraphQL API
dapp[5]的数量继续爆炸性增长,对开发人员(使用 Solidity[6]或其他区块链语言的)的需求[7]也越来越大。
Tiny熊
2021/06/10
1.8K0
在以太坊上构建 GraphQL API
如何使用DevStack在Ubuntu服务器上安装OpenStack
OpenStack是专为云计算开发的自由开源平台。通过这个以云为中心的平台,虚拟机和其他资源可以作为基础设施即服务提供给客户。安装OpenStack有许多方法 - 有些方法更具挑战性。
星哥玩云
2022/07/13
1.8K0
如何使用DevStack在Ubuntu服务器上安装OpenStack
使用Flask在服务器实现一个API接口。
主要涉及到Python3、MySQL、Flask、Nginx、uwsgi这几个东西。
小F
2020/10/09
1.9K0
使用Flask在服务器实现一个API接口。
在JBOSS服务器上使用Myfaces的JSF实现
JBOSS AS服务器默认使用的JSF实现是SUN的RI,要把他替换成Myfaces需要:
EltonZheng
2021/01/22
8480
在 React 中使用 Storybook,构建强大的自定义 UI 组件
虽然像React这样的基于组件的UI库简化了web开发,但它们也引入了测试和调试等新的复杂性。
前端修罗场
2022/07/29
9.4K0
在 React 中使用 Storybook,构建强大的自定义 UI 组件
使用Autofac在ASP.NET Web API上实现依赖注入
【原文】 Dependency Injection with ASP.NET Web API and Autofac,以下为摘要: 在ASP.NET Web API里使用Autofac 通过NuGet安装Autofac.WebApi。(Nuget会安装依赖的Autofac.dll)。 PM > Install-Package Autofac.WebApi 引用如下命名空间。 using Autofac; using Autofac.Integration.WebApi; 代码配置Autofac 可参看ht
张善友
2018/01/30
1.5K0
使用 react Context API 的正确姿势
本文介绍一下 React 中常见的 Context API 的使用方式。在使用 Context API 之前,我们还需要知道为啥要使用。❓
JS菌
2019/04/10
1.6K0
使用 react Context API 的正确姿势
logistic回归:从生产到使用【上:使用篇】
logistic回归:从生产到使用【上:使用篇】 前面介绍过几个算法,如KNN、决策树等(在微信公众号“数说工作室”中回复“jrsj”查看,不要引号),都可以用若干个“属性变量”来预测一个“目标变量”
数说君
2018/03/28
1.4K0
logistic回归:从生产到使用【上:使用篇】
在Mac上搭建React Native开发环境
概述 前面我们介绍过在window环境下开发React Native项目,今天说说怎么在mac上搭建一个RN的开发环境。 配置mac开发环境 基本环境安装 1.先安装Homebrew:用于安装Node
xiangzhihong
2018/02/06
1.9K0
在Mac上搭建React Native开发环境
点击加载更多

相似问题

使用JNI从本机方法返回null

36

JNI -本机方法中的致命错误:传递给JNI的错误全局或本地引用。

12

JNI丢失了对本机方法的引用

21

如果没有在本机方法中创建本地引用,何时清除本地引用?

13

JNI本地与全局引用:不是有效的JNI引用

14
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

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

洞察 腾讯核心技术

剖析业界实践案例

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