正式开始iOS学习计划了,还是一如既往的忙,所以都是周末搞了。
周六花了一天时间学习了下iOS,目前感觉良好,这应该归功于某位不知名的童鞋。
这个是他的BLOG http://www.samirchen.com/
下文之所以不按照 ** 入门的套路来写,是我觉得上面这位童鞋已经写得很好了,思路非常清晰,我很难超越,再去写就只能抄袭了。
但是目录结构还是借鉴过来了,在此说明下。
(1)AppStore下载
(2)apple.developer.com官网下载
安装点击下载好的Xcode,按提示操作即可。
以最简单的场景为例,创建一个UIButton,点击UIButton弹出一个提示框。
实现方式有两种:
(1)storyboard方式拖一个UIButton控件到storyboard,并双指轻按弹出提示框,选中Touch Up Inside点击事件,将其拖到ViewController.m代码编辑处,编辑代码即可。具体如下图所示:
(2)自定义View方式纯代码编写。
参考: http://www.samirchen.com/ios-start-1/
iOS中是通过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
这里我们使用 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文件,重新启动工作空间,继续后续操作。
参考: http://www.samirchen.com/ios-start-2/
为啥初学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对应位置,就能得到虚拟文件夹了,这时候虚拟文件夹和实体文件夹就对应上了。
以下文字为摘抄:
常见的页面容器有 UITabBarController
和 UINavigationController
。
UITabBarController
是通过 数组 的形式管理容器内的所有 UIViewController
UINavigationController
是通过栈的形式管理容器内所有 UIViewController
这两种容器可以嵌套使用,通常 UITabBarController
为主容器, UINavigationController
为辅容器
如下图所示:
入口程序为 MXJAppDelegate
,类似于 Android
中的 Application
类
我又仔细看了下,主目录下有个 main.h
文件,Supporting Files目录下有个 main.m
文件,这两个文件中都调用了 MXJAppDelegate
。嗯,这其实也证实iOS开发语言 Objective-C
是基于 C
语言的,都是以 main
为程序的真正入口。
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
中的各种控件了
以上对于其他新技术的学习,应该也有一定程度的指导意义
demo
http://www.samirchen.com/ios-index/ http://www.cocoachina.com/ios/20160301/15328.html