ios App实战流程

(待续)
demo地址 http://download.csdn.net/detail/xoxo_x/9711895

知识点:

  • App开发的全部流程

  • 如何进行短信验证码登录

  • 如何进行密码登录

  • Swift与OC进行互调的流程

  • Swift的语法结构

  • 使用代码和Storyboard进行交互

  • 如何自定义导航栏

  • 音频合成

  • 视频美颜

  • 数据库处理

  • 视频播放器

  • 音频播放器

  • 直播技术

  • 图片处理

  • 常用工具

一、创建名为FSKDemo的项目

  • 语言选择Objective-C

  • xcode为7.3.1(关于如何运行10.2系统的真机请查看:)

    如图:

这里写图片描述

二、工程设置

  • 在BuildSeting中搜索bitcode ,并设置为No(有些SDK不支持bitcode)

  • 项目使用oc与swift混编,swift版本为2.3

  • 如何在最新的xcode中使用Swift2.3或者2.0版本:http://blog.csdn.net/xoxo_x/article/details/53526281 (7.3.1无需设置,跳过)

    这里写图片描述

  • 清理工程删除ViewController.h和.m文件 以及main.storyboard

  • 并设置下图内容,将入口制空:

    这里写图片描述

  • 新建一个Login.storyboard

这里写图片描述

这里写图片描述

  • 在Login.storyboard中添加一个navigationController:

这里写图片描述

整理后如下:

这里写图片描述

  • 新建一个LoginVc.swift
    这时候会自动创建FSKDemo-Bridging-Header.h
    这个文件就是进行使用swift调用oc的地方
    将在swift中需要使用的头文件放到这里就可以
    我们在这个里边添加appdelegate.h

这里写图片描述

回到Login.storyboard中,删除RootViewController添加一个ViewController并且改为LoginVc
将UINavigationController的rootViewControler设为LoginVc

这里写图片描述

如果你没看懂,先下载Demo

三、开始工程,编写AppDelegate.m

  • 设置入口,初始化window
  • 在代码中调用特定的storybord 根据Identifier 查找Vc
  • 设置导航
  • 去导航黑线
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

    self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];
    self.window.backgroundColor = [UIColor whiteColor];

    //在代码中调用特定的storybord 根据Identifier 查找Vc
    //进入登录页面
    UIStoryboard *storyBoard = [UIStoryboard storyboardWithName:@"Login" bundle:nil];
    NSString *str = @"LoginNav";
    self.window.rootViewController = [storyBoard instantiateViewControllerWithIdentifier:str];
    //去导航黑线 并隐藏
    [[UINavigationBar appearance]  setBackgroundImage:[[UIImage alloc] init] forBarPosition:UIBarPositionAny barMetrics:UIBarMetricsDefault];
    [[UINavigationBar appearance] setShadowImage:[[UIImage alloc] init]];

    [self.window makeKeyAndVisible];
    return YES;
}

四、处理登录界面

如图:

这里写图片描述

这里使用约束进行屏幕适配,对于Scrollview,没有办法进行内部内容的约束,因为他的contentsize不固定,需要手写代码进行添加。

 func setScrollView() {
        self.loginScrollView.delegate = self
        self.loginScrollView.contentSize = CGSizeMake(self.view.frame.width*2, 0)
        let tap = UITapGestureRecognizer.init(target: self, action: #selector(textFResignFirstResponder))
        self.loginScrollView.addGestureRecognizer(tap)
        addLoginView()
    }
func addLoginView() {
        self.quickLoginView.frame = CGRectMake(0, 0, self.loginScrollView.frame.size.width, self.loginScrollView.frame.size.height)
        self.loginScrollView.addSubview(quickLoginView)
        self.usuallyLoginView.frame = CGRectMake(self.loginScrollView.frame.size.width, 0, self.loginScrollView.frame.size.width, self.loginScrollView.frame.size.height)
        self.loginScrollView.addSubview(usuallyLoginView)
        self.loginScrollView.layoutSubviews()
        self.loginScrollView.layoutIfNeeded()
    }

这时候我们发现运行的时候似乎约束没有起作用,frame值不正确,这是因为storybord中的约束还没来得及适应屏幕就被加载了,因此:

在这里viewDidAppear,更改frame,他会自动调用layoutIfNeed() 实现更新UI

 override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)

        self.quickLoginView.frame = CGRectMake(0, 0, self.loginScrollView.frame.size.width, self.loginScrollView.frame.size.height)
        self.usuallyLoginView.frame = CGRectMake(self.loginScrollView.frame.size.width, 0, self.loginScrollView.frame.size.width, self.loginScrollView.frame.size.height)
    }

demo地址 http://download.csdn.net/detail/xoxo_x/9711895

运行效果:

这里写图片描述

这里写图片描述

这里写图片描述

五、自定义Tabbar

当我们登录完成之后,需要跳转到主页,这时候需要自己自定义tabbar,下面为了以后开发方便,我们封装一下tabbar

  • 普通 的tabbar (没有凸起的tabbarItem)最常规的

  • 有凸起的那种,类似直播的

    继承UITabBarController 创建BaseTabbarVc 并添加 UITabBarControllerDelegate

class BaseTabbarVc: UITabBarController , UITabBarControllerDelegate{
}

这里写图片描述

import UIKit
var currentTabIdx = 0
var maxTabIdx = 0
var changeTabBySlide = 0
class BaseTabbarVc: UITabBarController , UITabBarControllerDelegate{
    var navs = ["SearchWordVcNav","LearnWordVcNav","MeVcNav"]
    var storys = ["Search","Learn","Me"]
    var icons = ["Search","Learn","Me"]
    override func viewDidLoad() {
        super.viewDidLoad()
        self.delegate = self
        maxTabIdx = navs.count - 1
        currentTabIdx = 0

        var vcs = [UIViewController]()
        for i in 0...icons.count-1{
            let vc = viewControllerWithTabTitle(storys[i],id: navs[i],title: "",img: "tab-\(icons[i])-inactive",selectedImg: "tab-\(icons[i])")
            vcs.append(vc)
        }
        self.viewControllers = vcs
        self.tabBar.backgroundColor = UIColor.clearColor()

        //去掉tabBar顶部线条
        let rect2 = CGRectMake(0, 0, self.view.frame.size.width, self.view.frame.size.height);
        UIGraphicsBeginImageContext(rect2.size);
        let context = UIGraphicsGetCurrentContext();
        CGContextSetFillColorWithColor(context, UIColor.clearColor().CGColor);
        CGContextFillRect(context, rect2);
        let img = UIGraphicsGetImageFromCurrentImageContext();
        UIGraphicsEndImageContext();
        self.tabBar.shadowImage = img
        UITabBar.appearance().shadowImage = UIImage()
        self.tabBar.barTintColor = UIColor.whiteColor()

        //tabbar的frame
        var rect = self.tabBar.frame;
        rect.size.height = 25;
        self.tabBar.frame = rect;
        UITabBar.appearance().clipsToBounds = true

    }

颜色工具

    func colorFromHex(hexString:String) -> UIColor{
        let hexint = intFromHexString(hexString)
        let color = UIColor(red: ((CGFloat) ((hexint & 0xFF0000) >> 16))/255, green: ((CGFloat) ((hexint & 0xFF00) >> 8))/255, blue: ((CGFloat) (hexint & 0xFF))/255, alpha: 1)
        return color
    }
    func intFromHexString(hexString:String)->UInt32{
        let scanner = NSScanner(string: hexString)
        scanner.charactersToBeSkipped = NSCharacterSet(charactersInString: "#")
        var result : UInt32 = 0
        if scanner.scanHexInt(&result) {
            print(result)
        }
        return result

        //let num = strtoul(hexString, nil, 16)
    }

循环创建

func viewControllerWithTabTitle(storyboard:String,id:String,title:String,img:String, selectedImg: String)->UIViewController{

        let image = UIImage(named: img)?.imageWithRenderingMode(.AlwaysOriginal)
        let selectedImage = UIImage(named: selectedImg)?.imageWithRenderingMode(.AlwaysOriginal)

        let vc = getVcByStoryboardId(storyboard, id: id) as! UIViewController
        let tab = UITabBarItem(title: title, image: image, selectedImage: selectedImage)
        vc.tabBarItem = tab

        let titleDict: NSDictionary = [NSForegroundColorAttributeName: colorFromHex("00d5e5")]
        let titleDict2: NSDictionary = [NSForegroundColorAttributeName: colorFromHex("eba50e")]
        vc.tabBarItem.setTitleTextAttributes(titleDict as? [String : AnyObject], forState: UIControlState.Normal)
        vc.tabBarItem.setTitleTextAttributes(titleDict2 as? [String : AnyObject], forState: UIControlState.Selected)

        return vc
    }
//通过id获取Vc
    func getVcByStoryboardId(srotyboard:String,id:String)->AnyObject!{
        let storyboard: UIStoryboard = UIStoryboard(name: srotyboard,bundle: nil)
        let vc: AnyObject! = storyboard.instantiateViewControllerWithIdentifier(id)
        return vc
    }

没看懂下demo- 地址 :http://download.csdn.net/detail/xoxo_x/9711895

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值