UI基础
在开始学习UI之前,我们需要知道里面的构造。
里面有一个storyboard文件,它主要是一个可视化编程的组件。跟c#和Android里面的一样,我们可以在这里直接拖拉我们需要的控件。
跟Android一样,它也有一个控制器。主要是负责管理UIView。因为整个界面是在UIView中搭建起来的。
我们来说说这个控制器:
当显示一个新界面的时候,就会创建一个控制器对象,然后再创建一个全屏的UIView,控制器是负责管理UIView。那么控制器有起到什么作用,它主要是用来管理控件的创建和销毁,管理在控件上显示什么数据。以及响应控件的事件,处理与用户之间的交互。
知道空间之后我们在来说说程序的运行流程:
当程序运行的时候会读取storyboard文件,创建箭头所指的控制器对象,然后创建控制器UIView对象,将UIView对象显示到屏幕上。
里面的控件与属性连线我就不说了,我们来讲讲拉动时候里面的那两个参数。一个是IBAction,一个是IBOutlet。
IBAction:它是方法的标示符,如果在方法上没有标示IBAction的话,这个方法将与控件连不上线。就返回值来看,它就相当于一个void。
IBOutlet:它是属性的标示符,如果声明的属性上没有标示IBOutlet的话,这个属性将与控件连不上线。
现在我们来看看在几个UIView上的属性,它们的用处不是一般的大。当我们需要修改尺寸和位置的时候还得靠它。
首先来看看frame用来控制在父控件中的尺寸和位置,不过需要强调的是它是操作在父控件中的,并且其实点的位置是父控件的左上角的位置。如果是全屏的UIView,它的起始点就是(0,0)位置。
在frame中有两个属性,分别是origin和size。
origin 表示的是位置。
size 表示的是尺寸。
在来看看bounds属性,它是用来控制矩形框的位置和尺寸(以自己左上角为原点),它里面也由origin和size两个属性,不过origin自己左上角一般为(0,0)点。给我的感觉它就是用来弄尺寸的。可能现在还没好好的使用上。不过先像这样理解着,之后找到新的理解方式后再记录下来。
看看center属性, 它是用来修改空间的位置。不过需要注意的是它是以控件的中心位置为起始点。每次都是跟着中心点移动。
最后来看看transform属性,它既可以修改空间的尺寸和位置还可以让空间旋转。这个属性的功能是最多的。
这个方法我也不怎么熟悉,直接上代码:
先说移动,假设我们这有一个view属性
self.view.transform = CGAffineTransformTranslate(self.view.transform,int1,int2);
//这里我要解释一下为什么使用CGAffineTransformTranslate而不使用CGTransformMakeTranslation(int1,int2);
因为transform每次都是以自己的起始位置为参照中的,如果移动之后,它会记住之前的位置。以至于下次无法再移动。因此我们使用CGAffineTransformTranlate,设置以自己为参照,每次移动之后参照也跟着移动。这样就才能到达我们需要的移动效果。
在说说尺寸:
self.view.transform = CGAffineTransformScale(self.view.transform,倍数,倍数);
原理跟上面差不多,只是里面的倍数有些差别,当大于1的时候是放大,当小于1的时候是缩小。
再来看看我们最关心的旋转
self.view.transform = CGAffineTransformRotate(self.view.transform,M_PI_4);
这里我们使用的是宏,如果是数值的话,数值代表角度。正数代表顺时针旋转,负数代表逆时针旋转。
方法抽取:
把相同的代码拷贝出来,不同的东西通过参数传入。
这里我就不详细展示方法的抽取了,因为这东西通过文字是说不清楚的。
来看看iOS中的动画:
它有两种方式一个是头尾式,一个是block式。
来说说头尾式:直接上代码。
[UIView beginAnimations:nil context:nil];第一个参数是动画ID,第二参数是内容。这里我们刚开始入门就不深入了,之后在总结的时候会详细说明。
[UIView setAnimationDuration:1.0];设置动画的时间
[UIView commitAnimation];提交动画
第二种方式(最常使用的方式)
[UIView animateWithDuration:1.0animations:^{
需要动画效果的代码
}];
说完之后我们再来说说UIButton,它由一个imageView和lable组成。因此它可以记可以显示图片,也可以显示文字。感觉这个是比较重要的东西。因为app离不开按钮。
再来看看一个东西plist文件,这文件跟xml文件也是用来存放数据的。
里面存放的东西是NSArray和NSDictionary
来看看怎么使用,要使用plist文件需要找到plist文件的全路径。
NSString *path = [[NSBundle mainBundle]pathForResource:文件名.扩展名 ofType:nil];
NSArray *arr = [NSArrayarrayWithContentsOfFile:path];
这样就拿到plist文件中的数据了。
这里看完了,我们再来看看UIImage的2种加载方式
注意在拖放图片进Xcode里面的时候不要把jpg文件放进Images.xcassets文件中。这里在Xcode5中还是不能识别的。到了6才能识别。jpg文件存放进supporting Files包中。
在加载的图片的时候,如果是jpg图片需要是用全名,不能省略后缀名。如果是png就可以省略后缀名
加载的方式:
1、imageNamed的方式(这个方法是会带缓存的)
UIImage *image =[UIImage imageNamed:@“图片名”];
2、imageWithContentsOfFile方式(这个方法不带缓存)
NSString *path = [NSBundle mainBundle]pathForResult:@“图片名” ofType:nil];
UIImage *image = [UIImage imageWithContentsOfFile:path];
在来看看帧动画的使用:
self.要展示动画的view.animationImages = array;//设置帧动画中的图片
self.要展示动画的view.animationRepeatCount = 1;//设置播放的次数
self.要展示动画的view.animationDuration = 2.0;//设置播放的时间
[self.要展示动画的view startAnimating];//开始动画
[self.要展示动画的view performSelector:@selector(setAnimationImages:) withObject:nil afterDelay:2.1];延迟。0.1面后执行setAnimationImages方法,主要是用来清空图片。防止程序奔溃。
注意:在app中瞬间占用较大内存然后立即释放是可以的,不会被杀掉。