UI基础

来源:互联网 发布:评价刘雯 孙菲菲 知乎 编辑:程序博客网 时间:2024/05/22 05:10

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中瞬间占用较大内存然后立即释放是可以的,不会被杀掉。

0 0