从头开始swift2.1 仿搜材通项目(四) 首页的实现

本节我们来实现一个常见的APP首页效果,包含顶部广告无限滚动,功能模块引导等等,如图所示:

QQ20151219-1@2x.png

因为要展示图片,我们先添加一个比较知名的图片加载第三方:Kingfisher,和一个朋友写的广告轮播:Reindeer,这个轮播库比较好的一点就是,可以自由的定制图片的加载方法,你可以选择任意的图片加载第三方甚至你可以使用自己写的加载方法:

banner.setRemoteImageFetche({ (imageView, url, placeHolderImage) -> Void in
    //这里为图片加载的代码
    imageView.kf_setImageWithURL(NSURL(string: url)!, placeholderImage: placeHolderImage)
})

这里我们到Podfile中添加刚刚说到的这两个工具:

source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!

pod 'BaiduMapKit' #百度地图SDK https://github.com/BaiduLBS/BaiduMapKit
pod 'Kingfisher' #图片加载 https://github.com/onevcat/Kingfisher
pod 'Reindeer' #图片轮播 https://github.com/Evilcome/Reindeer

然后cd到当前目录,pod update,这些命令不熟悉的请看我之前的文章,这里不再废话了。

ok,准备工作做好了,我们去Home.StoryBoard中拖拖控件为首页布局吧。首页放置一个ScrollView,因为有的屏幕大有的屏幕小很有可能一屏显示不完,这里我们就需要上下滑动的ScrollView了。
放入ScrollView,并添加约束,填充整个屏幕。

QQ20151219-2@2x.png

我们暂时把界面尺寸调整为600x900,没有实际上的作用,只是在布局时方便一些:
QQ20151219-3@2x.png

再添加一个View放到ScrollView中,设置垂直水平居中,并也填充整个父级。
QQ20151219-4@2x.png

QQ20151219-5@2x.png

为这个View设置一个背景色,
QQ20151219-6@2x.png

再放置一个View,也就是我们要用来放置广告位的轮播View了,高度就用默认的128吧。
QQ20151219-7@2x.png

这里我们需要创建ViewController去写代码了。
QQ20151219-8@2x.png

将SB和VC关联起来
QQ20151219-9@2x.png

再将高度为128的View连线到VC中,命名为scrollLayout。
QQ20151219-10@2x.png

import Reindeer,再创建一个initBanner的方法:

    ///广告位
    func initBanner(){

        let anotherBanner = BannerPageViewController()
        scrollLayout.addSubview(anotherBanner.view)

        anotherBanner.interval = 3 //3秒自动切换下一张
        anotherBanner.placeholderImage = UIImage(named: "placeholder") //加载完成前显示的图片
        anotherBanner.setRemoteImageFetche({ (imageView, url, placeHolderImage) -> Void in
            //设置任意图片加载方式
            imageView.kf_setImageWithURL(NSURL(string: url)!, placeholderImage: placeHolderImage)
        })
        anotherBanner.setBannerTapHandler({ (index) -> Void in
            //点击了某一张图片
            print(index)
        })
        
        anotherBanner.images = [
            "http://pic9.nipic.com/20100817/4845745_124224113296_2.jpg",
            "http://pic26.nipic.com/20121223/11613623_164837493315_2.jpg",
            "http://pic2.ooopic.com/10/79/67/75b1OOOPIC15.jpg"
        ]
        
        anotherBanner.startRolling()
    }

不要忘记在viewDidLoad中调用一下这个方法。现在我们运行看一下。


QQ20151220-1@2x.png

发现布局非常的乱,上面红色部分其实是ScrollView的颜色,怎么会这样呢,其实细心的同学可能一眼就看出,红色部分和顶部Nav的高度几乎是一致的,我们在vidDidLoad中加上这段代码,并再次运行:

        self.automaticallyAdjustsScrollViewInsets = false
        self.extendedLayoutIncludesOpaqueBars = false
        self.edgesForExtendedLayout = UIRectEdge.None

QQ20151220-2@2x.png

OK可以看到我们的layout已经对齐顶部了,现在我们需要对创建的anotherBanner控件添加约束,让它与scrollLayout大小一致,这里给大家推荐一款工具SnapKit,开发Swift必备工具之一哦。一样的我们去pod里添加,并update
pod 'SnapKit' #自动布局 https://github.com/SnapKit/SnapKit
然后我们回到initBanner方法,对initBanner添加约束:

        import SnapKit
        //...
        anotherBanner.view.snp_makeConstraints { (make) -> Void in
            make.edges.equalTo(self.scrollLayout)
        }

QQ20151220-3@2x.png

OK很完美的显示出来了。现在我们添加搜索框。距离顶部14,高度为60.设置为深一点的灰色。
QQ20151220-4@2x.png

再往里面放一个View,注意截图的层级关系。左右填满,上下0.5间距,背景就用白色。
QQ20151220-5@2x.png

为什么要这样做呢?我们更新一下frames,发现有没有两条明显的分割线了呢?以前很多朋友可能是直接放一个白色的View,再拖两条灰色的Label进去,这样也可以达到效果,但我想,能用两个控件就完成的事情,就不要再多一个了,后面这样的例子还有很多,慢慢的你会发现它的好处的。
QQ20151220-6@2x.png

再向白色View中放入一个TextField,和一个Button,将Button的文字删除,并设置一张图片,宽高都设置为44,距右30,垂直居中:
QQ20151220-7@2x.png

同样,TextField也设置为距左30,距右5,垂直居中,然后更新一下frames:
QQ20151220-8@2x.png

为TextField设置hint:搜索信息价/市场价/供应/求购/商圈
现在搜索框做完了,我们来运行一下:
QQ20151220-9@2x.png

效果还是不错的,只是这家广告公司请大家无视,我随便从网上抓的图。
现在我们来做下面的4个格子布局。新加一个View,一样的距顶14,深灰,高为180,再放一个白色View,上下0.5.
QQ20151220-10@2x.png

放两个View,十字架,一个垂直一个水平,把白色View分成4份
QQ20151220-11@2x.png

现在我们可以在4个格子里放入4个View,填充满各自的格子。方便大家观察,我先是填充了4种颜色,不过后面我们都要把颜色改回Default,不然分割线就看不到了。
QQ20151220-12@2x.png

分别向格子View里放入下面控件并布局
QQ20151220-13@2x.png

OK,4个格子我们都布局好了的话,现在运行来看看效果:
QQ20151220-14@2x.png

我们接着来完成下面的最新信息布局。一样的放入两个View,分成上下带分割线,再放中间放一个看不见的View来作为中心点,一样把布局分成4部分。

QQ20151221-1@2x.png

现在可以看到已经等分成4个部分了,往它们里面放4个View,形成下面的布局:
QQ20151221-2@2x.png

分别向4个格子里放入控件并约束,将背景色改回Default:
QQ20151221-3@2x.png

还有最后一步,底部的声明,这个比较简单,先是一样的做法,来个分割线,再放几个Label,现在应该没有任何难度了吧:
QQ20151221-4@2x.png

好的,现在我们来运行看看:
QQ20151221-5@2x.png

效果是非常不错的展示出来了,可是却发现不能上下滑动,这时我们算一算所有布局加上间距的高度,并为ScrollView的第一个子View设置:
QQ20151221-6@2x.png

添加后发现约束报错了,这时我们点击删除它的垂直居中:
QQ20151221-7@2x.png

OK再次运行,很好的显示出来了。
QQ20151221-8@2x.png

本节内容比较多,也正好碰到周末事情也比较多,我断断续续的从周五写到周一才写完,希望同学们能耐心看完。
Git地址:https://github.com/bxcx/sctong
本节分支:https://github.com/bxcx/sctong/tree/3rd_home

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,657评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,662评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,143评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,732评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,837评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,036评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,126评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,868评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,315评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,641评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,773评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,470评论 4 333
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,126评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,859评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,095评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,584评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,676评论 2 351

推荐阅读更多精彩内容