近期公司的项目全然仿了蘑菇街client的框架,自己从网上找了一下,没有发现源代码。问遍各大QQ群也没有结果。上周五晚上一直在思考这个框架怎样搭建,周六早上有了灵感。写了一半。今天接着完好了一下。

在这里和大家分享一下。

我先把效果让大家看一下。然后结合效果说一下自己的实现思路吧。

效果图:



首先呢。最上面的小猫图片,这个将来能够是一张图片或者是一个轮播都能够的,这里临时称作headerView。在ViewController 中设置一个最底端的mainTableView。让mainTableView的tableViewHeaderView指向headerView。接下来再看红色部分。这个部分是一个滚动栏上面有一些类目能够供用户选择,这里就暂且用一个UIView的实例segmentBack实现一下。

大家依据动画效果能够发现segmentBack事实上是mainTableView的sectionHeaderview所以,我们能够通过例如以下代码实现:

- (UIView *)tableView:(UITableView *)tableView viewForHeaderInSection:(NSInteger)section{

    UIView *segmentBack =[[UIView alloc] initWithFrame:CGRectMake(0, 0, kDeviceWidth, 40)];
segmentBack.backgroundColor =[UIColor redColor]; return segmentBack; }

我们接着再往以下看左右滑动首先我们让mainTableView的单元格数量为1。section数量为1。然后在第一个单元格上加入containScroll实现左右滑动。

为了切换几个smallTableview这里为了把代码模块化,每一个切换的页面用VC.view来实现。

然后在为其加入tableView作为子视图。并将VC.view加入到containScroll上。这样子思路差点儿相同了。能够了么。哈哈,当然不能够,由于我们还没有考虑到手势的冲突呢。

我们发现上下滑动的话。最底层的mainTableView的须要识别上下滑动的手势,还有就是VC.view上的smallTableview的也须要识别上下滑动的手势。

怎么办呢,我们都知道UITableView继承自UIScrollView, 在这里就能够使用UIScrollviewDelegate的-(void)scrollViewDidScroll:(UIScrollView *)scrollView 这种方法,用来对当前的smallTableview的偏移量进行推断,假设偏移量达到某个点。当前smallTableview不能够滑动,相同的道理。对于mainTableView我们也使用这个代理方法来对mainTableView的偏移量进行推断。这样子就攻克了手势的冲突了。

smallTableview的关键代码例如以下:

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

    [delegate judgeScrollViewWhenScroll:scrollView];

}
-(void)judgeScrollViewWhenScroll:(UIScrollView *)scrollView{

        if (scrollView.contentOffset.y==0) {
mainTableView.scrollEnabled =YES;
scrollView.scrollEnabled =NO;
NSLog(@"scroll conentOffsetY %f",scrollView.contentOffset.y);
}
}

mainTableView的关键代码例如以下:

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

       if (mainTableView.contentOffset.y==140) {//这个140是有headerview和section的headerView的高度之和来决定,大家到时候能够改动

        targetVC.mainTableView.scrollEnabled =YES;
mainTableView.scrollEnabled =NO;
NSLog(@"TableView conentOffsetY %f",mainTableView.contentOffset.y); } }

demo下载地址:蘑菇街框架

大家哪位朋友假设积分不够的话,能够在博客下留言写下邮箱。我发给大家,私信我也能够哦^_^。

不好意思。前一段时间分享的demo有点小bug。我修复了以后本来打算把原来的那个给删掉的,发现删不了了。好苦恼。我把最新的demo分享给大家,大家能够比較下哦。

修复后的demo下载地址:demo

IOS开发之蘑菇街框架的更多相关文章

  1. iOS 开发之照片框架详解(2)

    一. 概况 本文接着 iOS 开发之照片框架详解,侧重介绍在前文中简单介绍过的 PhotoKit 及其与 ALAssetLibrary 的差异,以及如何基于 PhotoKit 与 AlAssetLib ...

  2. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  3. iOS 开发之照片框架详解

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework.html 一. 概要 在 iOS 设备中,照片和视频是相当重 ...

  4. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  5. ReactiveCocoa - iOS开发的新框架

    本文转载至 http://www.infoq.com/cn/articles/reactivecocoa-ios-new-develop-framework ReactiveCocoa(其简称为RAC ...

  6. iOS 开发之照片框架详解(1)

    http://kayosite.com/ios-development-and-detail-of-photo-framework.html/comment-page-1 一. 概要 在 iOS 设备 ...

  7. iOS开发--SQLite重要框架FMDB的使用

    什么是FMDB: FMDB是一个和iOS的SQLite数据库操作相关的第三方框架.主要把C语言操作数据库的代码用OC进行了封装.使用者只需调用该框架的API就能用来创建并连接数据库,创建表,查询等. ...

  8. 【iOS开发】Alamofire框架的使用二 高级用法

    Alamofire是在URLSession和URL加载系统的基础上写的.所以,为了更好地学习这个框架,建议先熟悉下列几个底层网络协议栈: URL Loading System Programming ...

  9. iOS 开发之照片框架详解(3)

    http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 三. 常用方法的封装 虽然 Phot ...

随机推荐

  1. js闭包详解-转自好友trigkit4

    闭包(closure)是Javascript语言的一个难点,也是它的特色,很多高级应用都要依靠闭包实现. 闭包的特性 闭包有三个特性: 1.函数嵌套函数 2.函数内部可以引用外部的参数和变量 3.参数 ...

  2. HTTP——状态码

    (转载) 完整的 HTTP 1.1规范说明书来自于RFC 2616,你可以在http://www.talentdigger.cn/home/link.php?url=d3d3LnJmYy1lZGl0b ...

  3. [terry笔记]redhat5.5_11gR2_RAC_安装

    redhat5.5_11gR2_RAC_安装,这篇主要记录RAC安装的执行步骤,最烦琐的就是前期配置,到后面图形界面runInstaller,asmca,dbca就很容易了. --hostname检查 ...

  4. hdu 4288 线段树+离线+离散化

    http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7  假设 ...

  5. hdu 5269 ZYB loves Xor I &amp;&amp; BestCoder Round #44

    题意: ZYB喜欢研究Xor,如今他得到了一个长度为n的数组A. 于是他想知道:对于全部数对(i,j)(i∈[1,n],j∈[1,n]).lowbit(AixorAj)之和为多少.因为答案可能过大,你 ...

  6. 代理server poll version

    poll和select一样,管理多个描写叙述符也是进行轮询,依据描写叙述符的状态进行处理,可是poll没有最大文件描写叙述符数量的限制,select is 1024/2048 #include &qu ...

  7. 转载-让PIP源使用国内镜像,提升下载速度和安装成功率

    让PIP源使用国内镜像,提升下载速度和安装成功率. 对于Python开发用户来讲,PIP安装软件包是家常便饭.但国外的源下载速度实在太慢,浪费时间.而且经常出现下载后安装出错问题.所以把PIP安装源替 ...

  8. hdoj--1408--盐水的故事(技巧)

    盐水的故事 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  9. net实现ping的方法

    class ServicePinger { private static readonly ILog log = LogManager.GetLogger(typeof(ServicePinger)) ...

  10. 运维派 企业面试题2 创建10个 "十个随机字母_test.html" 文件

    Linux运维必会的实战编程笔试题(19题) 企业面试题2: 使用for循环在/tmp/www目录下通过随机小写10个字母加固定字符串test批量创建10个html文件,名称例如为: --[root@ ...