iOS 高仿:花田小憩3.0.1

前言

断断续续的已经学习Swift一年多了, 从1.2到现在的2.2, 一直在语法之间徘徊, 学一段时间, 工作一忙, 再捡起来隔段时间又忘了.思来想去, 趁着这两个月加班不是特别多, 就决定用swift仿写一个完整项目.

个人文字功底有限, 就我而言, 这款APP做的挺唯美的…

github地址

github地址

声明

花田小憩项目里面的都是真实接口, 真实数据, 仅供学习, 毋作其他用途!!!

项目部分截图

由于项目的大体功能都已经实现了的, 所以整个项目还是比较庞大的.所以, 下面罗列部分功能的截图.
由于gif录制的时候, 会重新渲染一遍图片, 所以导致项目中用到高斯模糊的地方, 看起来感觉比较乱, 实际效果还是不错的.

新特性

首页

详情页

评论

分享

商城首页

商城详情页

商品搜索

支付

图片浏览器

专栏作家

个人中心

项目环境

编译器 : Xcode7.3及以上

语言 : Swift2.2

整个项目都是采用纯代码开发模式

tip: 之前编译环境这儿有点错误, 因为我项目中用了Swift2.2的特性, 2.2之后方法名需要写成#selector(AddAddressViewController.save), 不再使用双引号了

第三方框架

还用到了MBProgressHUD.
除此之外,几乎全部都是自己造的小轮子

目录结构详解

Classes下包含7个功能目录:

Resources : 项目用到的资源,包含plist文件, js文件字体

Network : 网络请求, 所有的网络请求都在这里面, 接口参数都有详细的注释

Tool : 包含tools(工具类), 3rdLib(第三方:友盟分享, MBProgressHUD ), Category(所有项目用到的分类)

Home : 首页(专题), 包含专题分类, 详情, 每周Top10, 评论, 分享等等功能模块

Main : UITabBarController, UINavigationController设置以及新特性

Malls : 商城, 包含商城分类, 商品搜索, 详情, 购物车, 购买, 订单, 地址管理, 支付等等功能模块

Profile : 个人中心, 专栏作者, 登录/注册/忘记密码, 设置等功能模块

大家可以下载项目, 对照这个目录结构进行查看, 很典型的MVC文件结构, 还是很方便的.

项目部分功能模块详解

① 新特性NewFeatureViewController : 这个功能模块还是比较简单的, 用到了UICollectionViewController, 然后自己添加了UIPageControl, 只需要监听最后一个cell的点击即可.

这儿有一个注意点是: 我们需要根据版本号来判断是进入新特性界面, 广告页还是首页.

② 下拉刷新RefreshControl : 在这个项目中, 没有用第三方的下拉刷新控件, 而是自己实现了一个简单的下拉刷新轮子, 然后赋值给UITableViewControllerpublic var refreshControl: UIRefreshControl?属性. 主要原理就是判断下拉时的frame变化:

高斯模糊: 使用的是系统自带的高斯模糊控件UIVisualEffectView, 它是@available(iOS 8.0, *), 附一段简单的使用代码

可以根据alpha = 0.5, 调整alpha来调整模糊效果, gif图中的高斯模糊效果不是很明显, 实际效果特别好.

高斯模糊

商城购物车动画:这组动画还是比较简单的, 直接附代码, 如果有什么疑惑, 可以留言或者私信我

⑤ 主题详情页:商城详情页的做法也是差不多的, 不过更简单一点.

1038348-780ab6cb1efb08aa

主题详情页

关键一点在于, 详情页的展示主要依靠于H5页面. 而我们需要根据webview的高度来确定webviewCell的高度.我的做法是监听UIWebViewwebViewDidFinishLoad, 取出webView.scrollView.contentSize.height然后给详情页发送一个通知, 让其刷新界面. 暂时没有想到更好的方法, 如果您有更好的做法, 请务必告诉我, 谢谢…

UIWebView中图片的点击

第①步: 我们创建一个image.js文件, 代码如下:

第②步:在UIWebView的代理方法webViewDidFinishLoad中, 加载JS文件, 并给图片绑定绑定点击事件

第③步:在UIWebView的代理方法-webView:shouldStartLoadWithRequest:navigationType:中判断图片的点击

⑦ 登录/注册/忘记密码: 眼尖一点的朋友可能在上面的gif中已经发现, 花田小憩中的登录/注册/忘记密码界面几乎是一样的, 我的做法是用一个控制器LoginViewController来代表登录/注册/忘记密码三个功能模块, 通过两个变量isRegisterisRevPwd来判断是哪个功能, 显示哪些界面, 我们点击注册忘记密码的时候, 会执行代理方法:

⑧ 验证码的倒计时功能

验证码倒计时

设置模块中给我们评分

这个功能在实际开发中特别常见:

给我们评分

代码如下, 很简单:

其中最后的id需要填写你自己的APP在AppStore中的id, 打开iTunes找到你自己的APP或者你想要的APP, 就能查看到id.

tip: 此功能测试的时候, 必须用真机!!!

⑩ 登录状态.

我们可以通过NSHTTPCookieStorage中的NSHTTPCookie来判断登录状态.也可以自定义一个字段来保存. 根据我抓包得知, 花田小憩APP的做法是第一次登录后保存用户名和密码(MD5加密的, 我测试过), 然后每次启动应用程序的时候, 会首先后台自动登录, 然后在进行评论/点赞等操作的时候呢, 参数中会带上用户的id.由于涉及到花田小憩的账号密码的一些隐私, 所以登录/注册模块, 我就没有没有完整的写出来. 有兴趣的朋友可以私信我, 我可以把接口给你, 在此声明: 仅供学习, 毋做伤天害理之事

`tip: 我在AppDelegate.swift中给大家留了一个开关, 可以快速的进行登录状态的切换…

⑩+①: 个人/专栏中心: 这两个功能是同一个控制器, 是UICollectionViewController而不是UITableViewController

个人中心

大家对UITableViewControllerheader应该很熟悉吧, 向上滑动的时候, 会停留在navigationBar的下面, 虽然UICollectionViewController也可以设置header, 但是在iOS9以前, 他是不能直接设置停留的.在iOS9之后, 可以一行代码设置header的停留

但是在iOS9之前, 我们需要自己实现这个功能:

⑩+@end: 整个项目, 东西还是蛮多的, 也不是仅仅几百上千字能说清楚的, 几乎每一个页面, 每一个文件, 我都有详细的中文注释. 希望大家一起进步. 这也是我的第一个开源的完整的Swift 项目, 有什么不足或者错误的地方, 希望大家指出来, 万分感激!!!

下载地址

github地址

如果对您有些许帮助, 请☆star

后续

可能有些功能模块存在bug, 后续我都会一一进行修复和完善的, 并更新在github上.

如果您有任何疑问,或者发现bug以及不足的地方, 可以在下面给我留言, 或者关注我的新浪微博, 给我私信.

联系我

github

1 7 收藏 评论

相关文章

可能感兴趣的话题



直接登录
跳到底部
返回顶部