需求:在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. 【转】C++ STL中常见容器的时间复杂度

    map, set, multimap, and multiset 上述四种容器采用红黑树实现,红黑树是平衡二叉树的一种.不同操作的时间复杂度近似为: 插入: O(logN) 查看:O(logN) 删除 ...

  2. 自定义 MessageBox 组件

    效果: 公共组件页面: js部分: <script>   export default {     props: {       title: {         type: String ...

  3. elasticsearch api约定

    elasticsearch REST API 使用JSON通过HTTP协议传输. 本约定贯穿整个REST API,除非有特别的说明. 一.多重索引 大多数APIs引用到一个index参数来在多个索引中 ...

  4. 简易的富文本编辑器WangEditor

    网址http://www.wangeditor.com/ var E = window.wangEditor; var editor = new E('#editor') // 或者 var edit ...

  5. for循环(foreach型)流程

  6. log4j.xml配置详解(转)

    转自:http://willow-na.iteye.com/blog/347340 Xml代码 <?xml version="1.0" encoding="UTF- ...

  7. Cesium截图功能

    首先安装  canvas2image npm intsall canvas2image --save 因为项目基于vue,所以需要在canvas2image的最后面 加上 export default ...

  8. laravel 跨域解决方案

    我们在用 laravel 进行开发的时候,特别是前后端完全分离的时候,由于前端项目运行在自己机器的指定端口(也可能是其他人的机器) , 例如 localhost:8000 , 而 laravel 程序 ...

  9. delphi三层DCOM架构

    DCOM架构: 服务端开发: 采用Delphi7+SQL2008 一.创建数据库和表 CREATE TABLE [dbo].[tb_Department]( [FKey] [uniqueidentif ...

  10. parse_str()函数怎么用?

    php parse_str()函数 语法 parse_str()函数怎么用? php parse_str()函数表示将字符串解析成多个变量,语法是parse_str(string,array),如果未 ...