设为首页 加入收藏

TOP

iOS高仿:花田小憩3.0.1(一)
2017-10-13 10:23:45 】 浏览:8781
Tags:iOS 高仿 花田 小憩 3.0.1

前言

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

花田小憩:是一个植物美学生活平台,
以自然生活为主导,
提倡植物学生活方法,
倡导美学标准的生活态度的一个APP.

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

声明

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

TIP: 如果截图显示不全的话, 可以访问下面的链接

简书

项目部分截图

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

新特性

首页

详情页

分享

评论

商城首页

商城详情页

商品搜索

支付

图片浏览器

专栏作家

个人中心

项目环境

编译器 : Xcode7.2

语言 : Swift2.1

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

第三方框架

use_frameworks!
platform :ios, "8.0"

target 'Floral' do

pod 'SnapKit', '~> 0.20.0' ## 自动布局
pod 'Alamofire', '~> 3.3.1' ## 网络请求, swift版的AFN
pod 'Kingfisher', '~> 2.3.1' ## 轻量级的SDWebImage

end

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

目录结构详解

Classes下包含7个功能目录:

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

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

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

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

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

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

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

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

项目部分功能模块详解

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

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

  private let SLBundleShortVersionString = "SLBundleShortVersionString"
    // MARK: - 判断版本号
  private func toNewFeature() -> Bool
    {
        // 根据版本号来确定是否进入新特性界面
        let currentVersion = NSBundle.mainBundle().infoDictionary!["CFBundleShortVersionString"] as! String
        let oldVersion = NSUserDefaults.standardUserDefaults().objectForKey(SLBundleShortVersionString) ?? ""
        
        // 如果当前的版本号和本地保存的版本比较是降序, 则需要显示新特性
        if (currentVersion.compare(oldVersion as! String)) == .OrderedDescending{
            // 保存当前的版本
             NSUserDefaults.standardUserDefaults().setObject(currentVersion, forKey: SLBundleShortVersionString)
            return true
        }
        return false
    }

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

// 监听frame的变化
        addObserver(self, forKeyPath: "frame", options:.New, context: nil)
 // 刷新的时候, 不再进行其他操作
    private var isLoading = false
    override func observeva lueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) {
        let y = frame.origin.y
        // 1. 最开始一进来的时候, 刷新按钮是隐藏的, y就是-64, 需要先判断掉, y>=0 , 说明刷新控件已经完全缩回去了...
        if y >= 0 || y == -64
        {
            return
        }
        
        // 2. 判断是否一进来就进行刷新
        if beginAnimFlag && (y == -60.0 || y == -124.0){
            if !isLoading {
                isLoading = true
                animtoringFlag = true
                tipView.beginLoadingAnimator()
            }
            return
        }
     
        // 3. 释放已经触发了刷新事件, 如果触发了, 需要进行旋转
        if refreshing && !animtoringFlag
        {
            animtoringFlag = true
            tipView.beginLoadingAnimator()
            return
        }
        
        if y <= -50 && !rotationFlag
        {
            rotationFlag = true
            tipView.rotationRefresh(rotationFlag)
        }else if(y > -50 && rotationFlag){
            rotationFlag = false
            tipView.rotationRefresh(rotationFlag)
        }
    }

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

private lazy var blurView : BlurView = {
        let blur = BlurView(effect: UIBlurEffect(st
首页 上一页 1 2 3 4 5 下一页 尾页 1/5/5
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇iOS多图片下载 下一篇iOS笔记之NSSet

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目