CGRect,CGPoint和CGSize都是结构体,它们的定义如下:
<span style="font-size:14px;">public struct CGRect { public var origin: CGPoint public var size: CGSize } </span>
<span style="font-size:14px;">public struct CGPoint { public var x: CGFloat public var y: CGFloat } </span>
<span style="font-size:14px;">public struct CGSize { public var width: CGFloat public var height: CGFloat } </span>
CGRectMake(x:CGFloat,_ y:CGFloat,_ width:CGFloat,_ height:CGFloat) -> CGRect
上述方法可以生成一个CGRect类型的对象,该函数有4个参数:分别是,创建视图的左上角距离屏幕左边界像素值,创建视图的左上角距离屏幕上边界像素值,视图宽度,视图高度。这些都是结构体,下面来说点比较高大上的~
UIView是所有iOS中控件的父类。例如按钮,标签,输入框等。也就是说,界面上显示的所有控件都是UIView。
可以利用UIView类的构造方法创建一个新的UIView,代码写在func viewDidLoad中,该方法是当前的视图控制器加载完成时系统自动调用的方法,一般将UI布局和数据加载的代码写在viewDidLoad方法中。
于是,创建UIView的方法为:
<span style="font-size:14px;"> override func viewDidLoad() { super.viewDidLoad() let firstView = UIView(frame: CGRectMake(100,200,110,150)) firstView.backgroundColor = UIColor.redColor() self.view.addSubview(firstView) } </span>上文中出现了新的类UIColor,颜色的使用一般有如下几种方式:
1、使用系统自带的颜色创建法
2、使用三原色进行创建
3、使用图片
栗子:
<span style="font-size:14px;">override func viewDidLoad() { super.viewDidLoad() // 系统自带的快速创建颜色方法 let firstView = UIView(frame: CGRectMake(10,60,50,50)) firstView.backgroundColor = UIColor.redColor() self.view.addSubview(firstView) // 指定颜色 let secondView = UIView(frame: CGRectMake(100,50)) secondView.backgroundColor = UIColor(red: 0.5,green: 0.5,blue: 1,alpha: 0.5) self.view.addSubview(secondView) // 使用图片 let thirdView = UIView(frame: CGRectMake(100,140,121,121)) thirdView.backgroundColor = UIColor(patternImage: UIImage(named:"swift.png")!) self.view.addSubview(thirdView) }</span>
在使用图片创建颜色并使用这个颜色的时候,该图片时平铺的,不会根据view的大小进行缩放。
<span style="font-size:14px;">self.view.addSubview(firstView)</span>
这是,我们称:self.view是firstView的父视图,而firstView则是self.view的子视图。任何一个视图的frame参数设置都是相对于父视图而言的,也就是说
<span style="font-size:14px;">let thirdView = UIView(frame: CGRectMake(100,121))</span>
100,140这两个参数是指从父视图边界开始算起的像素值。
另外,一个父视图,可以有好几个子视图。新添加的子视图,是覆盖在旧的视图的下面的,swift提供了一些方法来安排子视图的顺序~
<span style="font-size:14px;"><span style="white-space:pre"> </span>self.view.insertSubview(view: UIView,aboveSubview: UIView) <span style="white-space:pre"> </span>self.view.insertSubview(view: UIView,atIndex: Int) self.view.insertSubview(view: UIView,belowSubview: UIView)</span>
如此便可以在添加子视图的时候随心意安排子视图的顺序~真真是极好的~~
另外,已经添加的子视图也可以调整层次顺序:
<span style="font-size:14px;"> thirdView.bringSubviewToFront(view: UIView)// 将该view移动到所有子视图上面</span>
<span style="font-size:14px;"><span style="white-space: pre;"> </span>thirdView.sendSubviewToBack(view: UIView)// 将该view移动到最下面</span>
<span style="font-size:14px;"> thirdView.exchangeSubviewAtIndex(index1: Int,withSubviewAtIndex: Int)// 将下标为index1和index2的子视图交换位置</span>
此外,UIView类中也提供了一些简单的动画:
在软件开发过程中,一些动画是必不可少的,有了这些动画,可以让人觉得,咱们的app软软的,像个小动物一样在手里,于是评分暴增~哈哈哈~
言归正传咯,动画动画:<span style="font-size:14px;"> UIView.animateWithDuration(duration: NSTimeInterval,delay: NSTimeInterval,options: UIViewAnimationOptions,animations: { <span style="white-space:pre"> </span>() -> Void in code }) { (Bool) -> Void in code }</span>
几个参数含义:
动画持续时间
延迟,即在某时间后开始动画
相关的动画运行参数,例如设置为repeat,则动画就会一直重复执行
闭包,在这个闭包内,所有的参数都是动画的最终状态
另一个闭包,表示整个动画发生完成后会执行这个动画
需要注意的是,在动画的闭包体内所有的状态都应该可以是连续改变的,因此,如果讲view的颜色设置为图片颜色,那么不能实现从一个图片渐变到另一张图片,因为图片的转变不连续。
为了方便管理所有的view,可以为每一个view设置tag属性:
view.tag = 100
这一篇的最后,来说一下view的移除:
<span style="font-size:14px;"> <span style="white-space:pre"> </span>var view = self.view.viewWithTag(100) view?.removeFromSuperview()</span>锵锵锵,这一篇就到这里啦~作为一只兔子要去蹦跶一会儿了~