在正式进入UI之前,我们需要了解一些知识。
苹果手机的分辨率:iPhone3GS 320*480; iPhone4和iPhone4S 640*960;iPhone5c、5S 640*1136;
iPhone6 750*1334; iPhone6plus 1080*1920。
屏幕尺寸如3.5英寸:320 * 480, 如果采用的是Retina屏,宽和高都要分别乘以2,这也就是为什么3GS和4同为3.5英寸,但是分辨率却差了4倍。
学习UI需要使用xcode中空工程,iOS -> Application -> Empty Application.进入之后运行会出现设备的模拟器,通过command +1,+2,+3可以调整模拟器的大小分别100%,75%,50%。如果没有模拟器进入window -> device -> 添加设备模拟器。使用command + shift + h, 可以返回模拟器的主界面,输入两次h效果同iPhone双击home键。
一个完整iOS App = 各种各样的UI设计 + 业务逻辑 + 算法。
iOS从2.0开始到7.0都是拟物化的设计风格,7.0则放弃了这一设计,以线条为主,更倾向于扁平化的设计风格。
一 UIWindow
虽然我们还没学习UIView,但是你应当有一种意识,UIWindow是UIView的一个子类,继承其所有的属性、方法和实例变量。
UIWindow有什么作用?
UIWindow用来承载UIView的视图给用户,如果没有window,设备将是一片漆黑。
UIWindow有什么特点?
UIWindow伴随着整个应用程序的生命周期,知道app结束时才释放。我们通常不对它进行太多的设置和操作。一个app通常只有一个window。
UIWindow如何创建对象?
UIWindow *window = [UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.backgroundColor = [UIColor grayColor];
[self.window makeKeyAndVisible];
以上代码对于刚从OC过来的同学来说有很多陌生的代码,建议进入头文件中去查看。mainScreen返回一个代表设备屏幕的对象,bounds是一个返回值为CGRect的实例方法。大家首先要树立一种控件也是一种类,格式和我们学得OC相同。CGRect 是一个结构体,有两个元素:CGPointer origin; CGSize size; , CGPointer 也有两个元素: CGFloat x; CGFloat y; CGSize 有两个元素: CGFloat width; CGFloat height; 其中的CGFloat就是double。
二 UIView
view(是“视图”的意思):屏幕上的一块矩形区域。不同的空间对应着不同类型的视图。换句话说,UIView有很多子类,而且功能不尽相同。需要将UIView重视起来,APP中所有的可视化空间全部是UIView或者其子类。
如何创建一个UIView对象?
代码如下
UIView *aView = [UIVew alloc]initWithFrame:CGRectMake(CGFlaot x, CGFlaot y, CGFlaot width,
CGFloat heigth)]; // 开辟空间并初始化
aView.backgroudColor = [UIColor redColor]; // 给属性赋值
[self.window addSubview: aView]; // 将视图添加到父视图中
[aView release] ; // 释放aView的保有权
首先add方法和集合类的对象一样自动保有元素的所有权,所以释放aView没有问题。
其次, CGRectMake()是快速创建结构体的方法,frame是一个CGRect类型的结构体。
最后,说明一下NSRect类型结构体重各元素的作用。
要想在屏幕上画出一个矩形,首先知道位置,其次知道大小。CGRect的两个元素CGPointer和CGSize就是分别代表位置和大小。iOS中为了布局创建了平面坐标系。它的原点为屏幕的左上角。水平向右是X的正方向,垂直向下是Y的正方向。这样CGRect的4各元素就都清楚明白了。
需要注意的是如果子视图超过了父视图的边界,超过的 部分是没有响应的。
center
center其实是frame的衍生品,他们两个完全等价。center就是值矩形视图的中心坐标。他有两个元素:CGFloat x,CGFloat y。 center.x = frame.origin.x + frame.size.width/2 center.y = frame.origin.y + frame.size.height/2 .
bounds
bounds是一个CGRect类型的结构体。只不过它是自己的坐标系,它的子视图要以这个坐标系为准。它可以设置左上角的坐标为任意值。使用较少。
先说明一下frame、bounds、center的联系。
当frame.origin变化时,center也是变化的,反之,亦然;当frame.size变化时,bounds的size也是变化的,反之亦然;当center变化时,bounds.origin是不变的,反之亦然。
重点说明一下UIView的方法、属性。
1 插入元素方法
addSubview: , insertSubview: atIndex, insertSubview: aboveSubview, insertSubview: belowSubview。 当UIView对象调用这些方法时,会将参数subview添加为自己的子视图。而且插入越早编号越靠前,离用户越远。这里透露一个小技巧,在控制台有一个交叉的两个矩形的图标,点击它可以查看层次。
2 管理层次方法
bringSubviewToFront: , sendSubviewToBack:, exchangeSubviewAtIndex: withSubviewAtIndex:, removefromSuperview. 可以用来调整和用户的距离。
3 属性
hidden : 是否可见 BOOL
alpha: 不透明度 CGFloat
superview 返回父视图 UIView
subv 返回子视图 NSArray
tag 为对象添加标签,使用viewWithTag方法来调用对象。注意tag一般都大于1000;integer。
三 UILabel
UILabel: 是UIView的子类,可以显示文本。它在APP中出现的次数是最多的。
属性:
text:用来显示文本的内容,使用字符串赋值。
textColor:用来更改字符串的颜色
textAligment:用来进行水平的对齐操作。 NStextAligment是一个枚举,NStextAligmentLeft = 0,center = 1, right = 2.
backgroundColor: 用来显示控件的轮廓。
font :用来管理字符串的字体和大小等特性:fontWithName: size: , systemFontOfSize:。
numberOfLines: NSinteger 字符串显示几行。默认是1行,如果设置为0,系统自动判断。
lineBreakMode: NSlineBreakMode 是一个枚举类型。记住两个:NSlineBreakByWordWrapping.NSlineBreakByCharWrapping. 第一个值0, 第二个值1.
shadowColor :阴影的颜色
shadowOffset:阴影的偏移。后面的参数是一个NSPointer ,第一个元素代表X方向的偏移,另一个代表Y方向的偏移。