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 ...
随机推荐
- eclipse 附加进程调试java程序(转)
转自:http://blog.csdn.net/zhoushenghuang/article/details/54485645 第一步,启动Java程序时需要设置JVM参数 右击java项目-> ...
- 转载 初学者必看——最简单最清晰的Struts2项目搭建流程
https://blog.csdn.net/key0323/article/details/50773499 在项目中想要使用Struts2框架,我该怎么做?从哪里开始?这是我的疑惑,我想也是很多初学 ...
- js判断元素是否可见
dom元素是否可见可使用jq的is方法和dom的offsetParent === null方法 jq中 $(element).is(":visible") === true !!( ...
- mysql添加中文数据失败
日志信息: INFO 2015-01-13 10:44:36,078 org.springframework.beans.factory.xml.XmlBeanDefinitionReader: Lo ...
- HumanNet v2:用于疾病研究的人类基因网络 X科研网
HumanNet v2:用于疾病研究的人类基因网络人类基因网络已被证明在疾病研究的许多方面都很有用,已经开发了许多基于网络的策略来产生关于基因 - 疾病 - 药物关联的假设.预测和组织与特定疾病最相关 ...
- 百度语音 python
python实现语音识别 我们用到是百度语音识别,因为不掏钱哈哈!首先去百度官网去创建你的 APPID AK SK 这个网上很多大家没创建的自己看下 目前本SDK的功能同REST API,需要联网调用 ...
- c# 6.0 语法特性
namespace _6._0新特性 { using static _6._0新特性.Statics.StaticClass; class Program { static void Main(str ...
- js 微信公众号网页用户授权,获取微信code,access_tocken,用户信息
第一次做微信网页授权,过程有点艰难,主要是不知道redirect_uri的地址要怎么写,刚开始我以为就是授权结束后要跳转到的首页地址,于是写成了uri = 'http://18i194c049.ias ...
- java版扫雷
package com.titian.bean; import java.awt.CardLayout; import java.awt.Point; public class Grid { char ...
- struts2 值栈分析
目录 一.值栈分为两个逻辑部分 二.Struts2 利用 s:property 标签和 OGNL表达式来读取值栈中的属性值 1.值栈中的属性值: 2.读取对象栈中对象的属性: 3.默认情况下,Acti ...