护舒宝

 

swift和OC中frame的小差异

//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的基础动画变得更加容易

 

posted on 2015-12-09 10:11  护舒宝  阅读(817)  评论(0)    收藏  举报

导航