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的基础动画变得更加容易
时间: 2024-10-11 01:36:46

swift和OC中frame的小差异的相关文章

Swift实现OC中的单例模式

今天想通过手动的方式上传下信息到GRID CONTROL MANAGEMENT REPOSITORY里,出现如下的错误(红色部分): [[email protected] bin]$ ./emctl status agent Oracle Enterprise Manager 10g Release 10.2.0.1.0. Copyright (c) 1996, 2005 Oracle Corporation.  All rights reserved. --------------------

swift 与 OC中的需要注意知识点

swift oc    *swift有命名空间概念,所谓命名空间即同一个命名空间中相互可以调用不用导入.不同命名空间中可以起相同的名字 swift项目就是一个命名空间 *判断是否是某个类 .协议.方法 *运行时获取类属性列表.属性名称.将C语言字符串转成oc string *基本数据类型,在OC中没有可选,swift中如果定义成可选,运行时同样获取不到,使用KVC会崩溃,所以基本数据类型需要赋初值 *private 的属性,使用运行时,同样获取不到属性,同样会让KVC崩溃 *运行时即运行时执行的

OC开发学习过程中的一些小经验

1.引入头文件以及框架 :  @import   XXXX         XXXX表示需要引入的文件/框架2.头文件引用循环:两个头文件相互包含时,将其中一个头文件的类用@class引入3.设置边角幅度 :[  XX.layer setCornerRadius:100 ]  ;    XX表示需要设置边角的对象,一般是给按钮设置,边角幅度大小跟最后数字取值关联.4.多个引号处理方法:引号前加\,如果还有括号影响,就再单独用@“ “将其框起来..专业术语叫转义字符.. 5.在UIWebview中

Swift / Objective_C / Xcode实际开发中可能遇到的小功能小技巧总结

一:Swift3.0为视图添加旋转动画,效果如下: 代码实现: //创建动画 let anim = CABasicAnimation(keyPath: "transform.rotation") //设置相关属性 anim.toValue = 2 * M_PI anim.repeatCount = MAXFLOAT anim.duration = 15 //完成之后不移除,testView被释放,动画随着一起删除 anim.isRemovedOnCompletion = false t

swift中闭包 OC中Block 解决循环引用

OC 中 全局宏定义 #define WS(weakSelf)  __weak __typeof(&*self)weakSelf = self; 用法如下: WS(weakself) [self.tableView addHeaderWithCallback:^{ [weakself requestMemberList]; }]; swift 在比闭包 中使用 weakSelf weak var weakSelf = self demo4 {     // 使用?的好处 就是一旦 self 被释

Swift的数组与OC中数组的区别

相同的值可以多次出现在一个数组的不同位置: Swift中的数组,数据值在被存储进入到某个数组之前类型必须明确,可以显示的类型标注或者类型推断.而且,Swift中的数组不必是对象类型. OC中的NSArray和NSMutableArray,他们可以存储任何类型的实例,而且不提供他们返回对象的任何本质信息. Swift的数组与OC中数组的区别,布布扣,bubuko.com

iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)

由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心, 整个过程非常简单. 在已有的Swift工程中, 当你需要使用OC的类文件, 或者需要集成SDK时, 创建你需要的OC的类文件, 创建结束后, 会提示生成一个桥接头文件, 点击蓝色Create按钮. *OC工程也一样, 只是要进行相反的操作, 在需要创建OC文件的时候创建一个Swift的文件 *创

使用OC swift 截取路径中的最后的文件名

使用 OC swift 截取路径中的最后的文件名 如何截取下面路径中最后的文件名 AppDelegate.swift /Users/XXX/Desktop/Swift/swift02/code/02-自定义LOG/Weibo/Weibo/AppDelegate.swift  使用 OC 如何截取 - (NSString *)substringFromWith:(NSString *)str { NSInteger local = 0; while([str rangeOfString:@"/&q

OC中 self.view.frame.size.height = 100; 不能通过编译的原因

在OC中,当需要修改一个view的尺寸时,通常是通过先将 self.view.fram赋值给一个临时变量,然后修改临时变量,最后将临时变量赋值给 self.view.frame.代码如下: 1 // 1. 用一个临时变量保存返回值. 2 CGRect temp = self.view.frame; 3 4 // 2. 给这个变量赋值.因为变量都是L-Value,可以被赋值 5 temp.size.height = 100f; 6 7 // 3. 修改frame的值 8 self.view.fra