//1.0 OC中 CGRect 、CGPoint、CGSize 的结构如下: struct CGRect { CGPoint origin; CGSize size; }; struct CGPoint { CGFloat x; CGFloat y; }; struct CGSize { CGFloat width; CGFloat height; }; 在OC环境下,我们要改变一个控件的frame(如:x 或者 y 、width 、height)时,我们得定义一个临时的frame(假设为 CGRect temp)获取出当前控件的frame,然后通过修改temp的值后再赋值,覆盖之前的frame /*如: UIView *view = [[UIView alloc]init]; view.frame = CGRectMake(100,200,20,60); 当需要只改变x值时,我们得这么做 CGRect tempFrame = view.frame; tempFrame.origin.x = 200; view.frame = tempFrame; */ 这样造成我们在做动画时,就比较繁琐。 //2.0 再看Swift中 CGRect等的结构 public struct CGRect { public var origin: CGPoint public var size: CGSize public init() public init(origin: CGPoint, size: CGSize) } public struct CGPoint { public var x: CGFloat public var y: CGFloat public init() public init(x: CGFloat, y: CGFloat) } extension CGPoint { public static var zero: CGPoint { get } public init(x: Int, y: Int) public init(x: Double, y: Double) } 从最基本的结构看, swift 和 OC中 两者都是结构体,但是相对的swift多了两个构造方法,所以我们无法像OC中这样给frame 赋值 // view.frame = {{200,100},{100,300}} 而从swift的基本语法中,我们知道 var 是用来修饰变量的,是可以改变的,那就意味着像 origin 是可以直接改变的,// 修改x值,变得这么简单 view.frame.origin.x = 1000 就可以直接修改原有的x值,这样基于frame的基础动画变得更加容易
时间: 2024-10-11 01:36:46