UICollectionView中的cell包含UIScrollview
需求:在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的更多相关文章
- UICollectionView中的cell 左对齐
项目中使用UICollectionView做布局,会发现当某个section只有一个cell的时候cell会居中显示,而项目中都是居左显示,这就需要对UICollectionView的布局做些处理,首 ...
- UITableView中复用cell显示信息错乱
UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...
- 怎样在UICollectionView中添加Header和footer
---恢复内容开始--- 怎样在UICollectionView中添加Header和footer 转载于http://my.oschina.net/zboy/blog/221525 摘要 来自-htt ...
- 举一反三 willDisplayCell在UICollectionView中的一些应用
一.UICollectionViewCell动画 上一篇博客写仿58同城实现UITableViewCell动画,同样UiCollectionView中也能用,上一个是从右到左的动画还比较好弄, 但如果 ...
- iOS之UITableView中的cell因为重用机制导致新的cell的数据出现重复或者错乱
UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚 ...
- 记一次UICollectionView中visibleCells的坑
记一次UICollectionView中visibleCells的坑 项目的要求是这样的 其实也是一个轮播图,而已,所以依照轮播图的实现原理,这里觉得也很简单,还是利用UICollectionView ...
- UITableView中的cell的优化
1.cell的重用 所谓的cell的重用就是,视图加载的时候只会创建当前视图中的cell,或者比当前视图多一点的cell, 当视图滚动的时候,滚出屏幕的cell会放进缓存中,滚进屏幕的cell会根据I ...
- XE3随笔6:SuperObject 的 JSON 对象中还可以包含 "方法"
SuperObject 的 JSON 对象中还可以包含 "方法", 这太有意思了; 其方法的格式是: procedure Method(const This, Params: IS ...
- 仅Firefox中A元素包含Select时点击Select不能选择option
这是在使用京东的一个日期组件时碰到的bug,重现bug的代码精简如下 <!DOCTYPE HTML> <html> <head> <title> 仅Fi ...
随机推荐
- 数据库设计-Mysql数据库表设计的过程中几个关键点
一.表设计过程中应该注意的数据类型 1)更小的通常更好 控制字节长度 2)使用合适的数据类型: 如tinyint只占8个位,char(1024)与varchar(1024)的对比,char用于类似定长 ...
- 【转载】Elasticsearch--java操作之QueryBuilders构建搜索Query
原文地址:https://www.cnblogs.com/pypua/articles/9459941.html package com.elasticsearch; import org.elast ...
- 【记录】jquery动态控制div隐藏或者显示
1.jQuery判断一个元素当前状态是显示还是隐藏 $("#id").is(':visible'); //true为显示,false为隐藏 $("#id").i ...
- 2018-8-10-win10-uwp-httpClient-登陆CSDN
title author date CreateTime categories win10 uwp httpClient 登陆CSDN lindexi 2018-08-10 19:16:53 +080 ...
- SetDefaultDllDirectories问题
换台电脑编译报错! 在使用Visual Studio 2013编译程序的时候报以下错误 vc\atlmfc\include\atlcore.h(638): error C2039: “”: 不是“`g ...
- 【leetcode】sudokuSolver数独解题
0.摘要 小时候在报纸上玩过数独,那时候觉得很难,前几天在leetcode上遇到了这个题,挺有意思于是记录下来 一般一道数独题,就像他给的例子这样,9*9的格子,满足 行,列 ,宫均取1-9的数,切互 ...
- Kaggle数据集下载
Kaggle数据集下载步骤: 安装Kaggle库: 注册Kaggle账户: 找到数据集,接受rules: 在My Account>>API中,点击Create New API Token, ...
- Spring data jpa 依赖配置
<properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> &l ...
- 【Flutter学习】之动画实现原理浅析(一)
一,动画介绍 动画对于App来说,非常的重要.很多App,正是因为有了动画,所以才会觉得炫酷.移动端的动画库有非常的多,例如iOS上的Pop.web端的animate.css.Android端的And ...
- Sqli labs系列-less-5&6 报错注入法(上)
在我一系列常规的测试后发现,第五关和第六关,是属于报错注入的关卡,两关的区别是一个是单引号一个是双引号...当然我是看了源码的.... 基于报错注入的方法,我早就忘的差不多了,,,我记的我最后一次基于 ...