ios App实战流程

来源:互联网 发布:网络干货分享 编辑:程序博客网 时间:2024/06/05 19:29

(待续)
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 UIKitvar currentTabIdx = 0var maxTabIdx = 0var changeTabBySlide = 0class 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

0 0