需求:在scrollview的子View不为0,当scrollview的展示的index不为0且向右滑动CollectionView。CollectionView不滑动Cell,而是让scrollview切换内容,想左滑同理。

开始真的难到我了。后来在CollectionView上添加了一个滑动手势,代替自带的滑动手势。

UIPanGestureRecognizer *ges = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(mainViewGes:)];
ges.delegate =self;
[_mainView addGestureRecognizer:ges

  MainView即UICollectionView

- (BOOL)gestureRecognizerShouldBegin:(UIGestureRecognizer *)gestureRecognizer{
//用自定义的手势覆盖collectionView自带的手势
return YES;
}

  重新这个方法。

- (void)mainViewGes:(UIPanGestureRecognizer *)ges{
if (ges.state == UIGestureRecognizerStateChanged) {
// [self commitTranslation:[ges translationInView:self.view]];
}else if (ges.state == UIGestureRecognizerStateBegan){
// NSLog(@"UIGestureRecognizerStateBegan"); }else if (ges.state == UIGestureRecognizerStateEnded){
// NSLog(@"UIGestureRecognizerStateEnded");
[self commitTranslation:[ges translationInView:self.view]];
}
} /** 判断手势方向 */
- (void)commitTranslation:(CGPoint)translation {
CGFloat absX = fabs(translation.x);
CGFloat absY = fabs(translation.y);
// 设置滑动有效距离
if (MAX(absX, absY) < 50)
return;
if (absX > absY ) {
if (translation.x < 0) {//向左滑动
if (self.page.sentences.count > 1 && self.sentenceIndex + 1 < self.page.sentences.count) {
//想左滑动时,如果句子不是最后一个句子,那么是滑动句子
[self.currentCell.bottomView setContentOffset:CGPointMake(self.currentCell.bottomView.frame.size.width * (self.sentenceIndex + 1), 0) animated:YES];
}else{
if (self.sentenceIndex + 1 == self.page.sentences.count) {
//如果向左滑动时,句子是最后一个句子,那么是滑动page
if (self.pageNumber + 1 != self.currentCopyModel.pages.count) {
[self.mainView setContentOffset:CGPointMake(screen_width * (self.pageNumber + 1), 0) animated:YES];
}
}
}
}else{//向右滑动
if (self.page.sentences.count > 1 && self.sentenceIndex > 0) {
//当sentence不是第一个时,向右滑动是滑动句子
[self.currentCell.bottomView setContentOffset:CGPointMake(self.currentCell.bottomView.frame.size.width * (self.sentenceIndex - 1), 0) animated:YES];
}else{
//当sentence为第一个时。滑动就变成了滑动page
if (self.sentenceIndex == 0) {
if (self.pageNumber != 0) {
[self.mainView setContentOffset:CGPointMake(screen_width * (self.pageNumber-1), 0) animated:YES];
}
}
} }
} else if (absY > absX) {
if (translation.y<0) {//向上滑动 }else{ //向下滑动 }
}
}

  最后结果就是滑动手势结束之后才判断手势方向,然后手动调用CollectionView或Scrollview的setContenOffset方法。

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

然后会在这个协议里接收到方法。进行处理

  

此外还有一个跟

UICollectionView中的cell包含UIScrollview的更多相关文章

  1. UICollectionView中的cell 左对齐

    项目中使用UICollectionView做布局,会发现当某个section只有一个cell的时候cell会居中显示,而项目中都是居左显示,这就需要对UICollectionView的布局做些处理,首 ...

  2. UITableView中复用cell显示信息错乱

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  3. 怎样在UICollectionView中添加Header和footer

    ---恢复内容开始--- 怎样在UICollectionView中添加Header和footer 转载于http://my.oschina.net/zboy/blog/221525 摘要 来自-htt ...

  4. 举一反三 willDisplayCell在UICollectionView中的一些应用

    一.UICollectionViewCell动画 上一篇博客写仿58同城实现UITableViewCell动画,同样UiCollectionView中也能用,上一个是从右到左的动画还比较好弄, 但如果 ...

  5. iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱

      UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...

  6. 记一次UICollectionView中visibleCells的坑

    记一次UICollectionView中visibleCells的坑 项目的要求是这样的 其实也是一个轮播图,而已,所以依照轮播图的实现原理,这里觉得也很简单,还是利用UICollectionView ...

  7. UITableView中的cell的优化

    1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...

  8. XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"

    SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...

  9. 仅Firefox中A元素包含Select时点击Select不能选择option

    这是在使用京东的一个日期组件时碰到的bug,重现bug的代码精简如下 <!DOCTYPE HTML> <html> <head> <title> 仅Fi ...

随机推荐

  1. kubernetes容器集群管理启动一个测试示例

    创建nginx 创建3个nginx副本 [root@master bin]# kubectl run nginx --image=nginx --replicas=3 kubectl run --ge ...

  2. docker镜像仓库

    搭建私有镜像仓库 Docker Hub作为Docker默认官方公共镜像,如果想自己搭建私有镜像仓库,官方也提供registry镜像,使得搭建私有仓库非常简单. 下载registry镜像并启动 [roo ...

  3. java 关键字汇总

    关键字 描述 abstract 抽象方法,抽象类的修饰符 assert 断言条件是否满足 continue 不执行循环体剩余部分 default switch语句中的默认分支 do-while 循环语 ...

  4. MyEclipse安装jrebel7.0.2插件

    1 安装: windows --> install from site 填入网址 http://update.zeroturnaround.com/update-site-archive/upd ...

  5. HTML转成Excel设置单元格格式(文本)

    1) 文本:vnd.ms-excel.numberformat:@ 2) 日期:vnd.ms-excel.numberformat:yyyy/mm/dd 3) 数字:vnd.ms-excel.numb ...

  6. 十五、API请求接口-远程服务器返回错误: (400) 错误的请求错误

    一.远程服务器返回错误: (400) 错误的请求错误 捕获异常查看具体错误 using Newtonsoft.Json; using System; using System.Collections. ...

  7. Shell基本概述

    目录 Shell01--基本概述 1. Shell课程大纲介绍 2. 什么是Shell ? 3. 什么是Shell脚本 ? 4. 为什么要学Shell编程 ? 5. 学习Shell编程需要哪些知识 ? ...

  8. eclipse 附加进程调试java程序(转)

    转自:http://blog.csdn.net/zhoushenghuang/article/details/54485645 第一步,启动Java程序时需要设置JVM参数 右击java项目-> ...

  9. Es学习第三课, ElasticSearch基本的增删改查

    前面两课我们了解了ES的基本概念并且学会了安装ES,这节课我们就来讲讲ES基本的增删改查:ES主要对外界提供的是REST风格的API,我们通过客户端操作ES本质上就是API的调用.在第一课我们就讲了索 ...

  10. Qt pro使用sql之类的需要添加的模块

    举个栗子,当要使用QSqlQuery 的时候需要在pro中添加Qt +=sql 然后在.h里面#include<QSqlQuery>即可使用sql. 同理要使用media或者net的时候只 ...