一、概述
正式开始iOS学习计划了,还是一如既往的忙,所以都是周末搞了。
周六花了一天时间学习了下iOS,目前感觉良好,这应该归功于某位不知名的童鞋。
这个是他的BLOG http://www.samirchen.com/
下文之所以不按照**入门的套路来写,是我觉得上面这位童鞋已经写得很好了,思路非常清晰,我很难超越,再去写就只能抄袭了。
但是目录结构还是借鉴过来了,在此说明下。
二、实践篇
1.创建一个iOS项目
1.1 安装Xcode
Xcode下载:
(1)AppStore下载
(2)apple.developer.com官网下载
安装
点击下载好的Xcode,按提示操作即可。
1.2 创建一个空项目
1.3 添加一个交互事件
以最简单的场景为例,创建一个UIButton,点击UIButton弹出一个提示框。
实现方式有两种:
(1)storyboard方式
拖一个UIButton控件到storyboard,并双指轻按弹出提示框,选中Touch Up Inside点击事件,将其拖到ViewController.m代码编辑处,编辑代码即可。具体如下图所示:
(2)自定义View方式
纯代码编写。
参考:http://www.samirchen.com/ios-start-1/
2.管理第三方库
iOS中是通过CocoaPods管理库依赖的。
2.1 安装CocoaPods
由于CocoaPods
需要通过ruby
的gem
命令下载安装,而ruby
的软件源https://rubygems.org
因为使用的是亚马逊的云服务,所以被墙了,可以切换成taobao的源进行安装。
sudo gem sources -a https://ruby.taobao.org/
sudo gem sources -r https://rubygems.org/
sudo gem sources -l
sudo gem update
sudo gem install -n /usr/local/bin cocoapods -v 0.39
pod setup
pod --version
2.2 在当前项目中引入CocoaPods和第三方库
这里我们使用SVProgressHUD
和Masonry
。
SVProgressHUD
是一个提示框,类似于Android
中的ProgressDialog
Masonry
是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局
在项目根目录下创建Podfile文件,在文件中添加如下配置:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, "8.0"
target "iOSStartDemo" do
pod 'SVProgressHUD', '1.1.3'
pod 'Masonry', '0.6.3'
end
然后通过如下命令,安装第三方依赖库:
pod install
安装成功后,在项目根目录下会多出几个文件,我们打开.xcworkspace文件,重新启动工作空间,继续后续操作。
2.3 在代码中使用第三方库
参考:http://www.samirchen.com/ios-start-2/
3.实现一个多页面App
3.1 项目目录结构调整
为啥初学iOS就要考虑目录结构调整呢?
嗯,初学iOS,并不代表基础为0,之前的编码经验是可以灵活借鉴到新技术的学习中来的。
iOS官方使用MVC架构,和Android
类似。通常一个完整项目由基础功能模块、基础业务模块、各业务模块和资源文件组成,不同业务模块放到不同的包下面,每个业务模块都使用MVC模式。这样耦合会比较少,结构也会很清晰。
如下所示:
学姐在实际操作过程中,尝试了2种方式来调整目录结构:
(1)New Group方式
在Xcode中双指轻按项目主目录,弹出选项框,选中New Group,依次创建业务文件夹。
这种方式能够运行很OK,但是当我去Finder中去查找时,并没有找到我创建的文件夹,所有的文件都在一个目录下,还以为哪里出问题了。对照了下参考的demo,别人的明明就是有文件夹的啊,于是我Google了下,开始尝试方式(2)
(2)创建实体文件夹方式
直接在Finder对应位置创建相应的实体文件夹。
这时在Xcode中能看到对应的文件夹,但是当我开始run时,提示找不到**ViewController.h
,这个类明明是存在的,检查了好几遍。我比较了下方式(2)和方式(1)的不同,发现方式(2)的文件夹是蓝色的,方式(1)的文件夹是黄色的。捣腾半天,在研究怎么把蓝色变黄,于是又开始Google了,最终找到方法了,直接将Finder中的实体文件夹拖到Xcode中对应位置,然后删掉Xcode中的蓝色文件夹就行了。
运行结果符合预期,而且在Xcode和Finder中都能看到文件夹了,再也不用担心所有业务类堆一起了。
如下分别为效果图:
下面小结下:
Android
中有一个很重要的概念:package
,不同业务模块通常放到不同package中的。对某个类的引用,也需要导入这个类所在的包,或者是类名前带上包名。
然而iOS
中对某个类的引用直接import这个类的头文件即可,如import **ViewController.h
,并没有包名的说法。
Group
有点类似于package
,但它只是一个分组,是Xcode
环境下的虚拟文件夹,并不实际在Finder中能看到。
Finder中创建的实体文件夹,Xcode是不认的。Xcode只认虚拟文件夹,但是通过将Finder中的实体文件夹拖到Xcode对应位置,就能得到虚拟文件夹了,这时候虚拟文件夹和实体文件夹就对应上了。
3.2 Tab式 + Navigation式的项目架构实现
以下文字为摘抄:
常见的页面容器有UITabBarController
和UINavigationController
。
UITabBarController
是通过数组的形式管理容器内的所有UIViewController
UINavigationController
是通过栈的形式管理容器内所有UIViewController
这两种容器可以嵌套使用,通常UITabBarController
为主容器,UINavigationController
为辅容器
如下图所示:
入口程序为MXJAppDelegate
,类似于Android
中的Application
类
我又仔细看了下,主目录下有个main.h
文件,Supporting Files目录下有个main.m
文件,这两个文件中都调用了MXJAppDelegate
。嗯,这其实也证实iOS开发语言Objective-C
是基于C
语言的,都是以main
为程序的真正入口。
3.3 使用UITableView
UITableView
是一个列表View,类似于Android
中的ListView
和RecyclerView
参考:http://www.samirchen.com/ios-start-3/
三、总结
1.每个类都由***.h
和***.m
2个文件组成。
Android
中只有.java
文件
2.main.m
为程序的真正入口,它调用的AppDelegate
为Objective-C
代码入口。
对应于Android
中的Application
3.创建一个View的方式有两种:storyboard方式
和代码自定义方式
对应于Androud
中的.xml布局
和代码自定义方式
4.iOS中的库依赖使用的是CocoaPods
Android中库依赖使用gradle
5.iOS中没有package
,只有Group
概念,Group
是Xcode下的虚拟文件夹,不是实体文件夹。通过在Finder中创建实体文件夹,然后拖到Xcode中对应目录的方法,可以将实体文件夹和虚拟文件夹对应上
Android
中有package
概念,对类的引用需要import package
6.初步认识了下iOS
中几个常用控件:
第三方:SVProgressHUD
和Masonry
(1)SVProgressHUD
是一个提示框,类似于Android
中的ProgressDialog
(2)Masonry
是一个轻量级的布局框架,拥有自己的描述语法,采用更优雅的链式语法封装自动布局
原生:UIButton
,UITableView
,UITabBarController
,UINavigationController
,UIViewController
(1)UIButton
按钮,类似于Android中的Button
(2)UITableView
列表View,类似于Android中的ListView
和RecyclerView
(3)UITabBarController
管理tab的一个控制器
(4)UINavigationController
管理界面导航的控制器,也可以理解为界面路由控制?(个人理解)
(5)UIViewController
管理View的控制器,基础类,它的上级可以是UITabBarController
和UINavigationController
等(个人理解)
四、致读者
讲下自己对学习一门新技术的看法,以及个人学习方法:
(1)前提条件:
由于有Android
开发经验,所以学习新技术iOS时,不是且不能认为自己是0基础
Android
开发者学习iOS
只是拓宽知识广度,不应该以iOS
开发者的同等标准要求自己,会简单的iOS App开发,知道一些基本知识即可
(2)学习方法:
边实践边学习。
因为已经有Android
开发经验,第一步应该是搭建环境,能跑起来一个Hello World
程序
接下来照着入门教程,做一个简单的小功能,照着例子敲一边即可,熟悉下Xcode
使用,初步感受下iOS
程序的结构,初步了解下几个常见的控件。
再接下来,我觉得可以在Github上找个难度适中的iOS
项目,边学习Objective-C
语法和iOS
中的各种控件了
以上对于其他新技术的学习,应该也有一定程度的指导意义
以上仅代表个人意见,没有绝对性和权威性,欢迎各位吐槽
参考文档
http://www.samirchen.com/ios-index/
http://www.cocoachina.com/ios/20160301/15328.html