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的基础动画变得更加容易
swift和OC中frame的小差异的更多相关文章
- Swift实现OC中的单例模式
一.MySingle类 import Foundation class MySingle{ //定义单例的属性 var name:String? var age:Int? var height:Dou ...
- 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码?
https://www.cnblogs.com/upliver/p/5138160.html 如何在Swift的代码中使用OC的代码, 在OC的代码中使用Swift的代码? 随着苹果公司对Swift的 ...
- Swift和OC相互调
在项目中不免会有多中语言开发, 不说别的就我个人而言, 之前一直都是用 OC 写的代码, 封装很多工具类, 而苹果新出来 Swift , 现在项目在向 Swift 过渡, 或者新项目是 Swift , ...
- iOS8开发~Swift(五)Swift与OC混编
一.概要 首先看<The Swift Programming Language>中提到"Swift's compatibility with Objective-C lets y ...
- Swift: 比较Swift中闭包传值、OC中的Block传值
一.介绍 开发者对匿名函数应该很清楚,其实它就是一个没有名字的函数或者方法,给人直观的感觉就是只能看到参数和返回值.在iOS开发中中,它又有自己的称呼,在OC中叫Block代码块,在Swift中叫闭包 ...
- 如何在swift中实现oc中的分类
在oc中为了增强已有类的功能,我们经常使用分类.使用分类,我们可以在不破坏原有类的结构的前提下,对原有类进行模块化的扩展. 但是在swift中没有分类这种写法了.相对应的是swift中只有扩展(Ext ...
- iOS开发--Swift 如何完成工程中Swift和OC的混编桥接(Cocoapods同样适用)
由于SDK现在大部分都是OC版本, 所以假如你是一名主要以Swift语言进行开发的开发者, 就要面临如何让OC和Swift兼容在一个工程中, 如果你没有进行过这样的操作, 会感觉异常的茫然, 不用担心 ...
- OC中 self.view.frame.size.height = 100; 不能通过编译的原因
在OC中,当需要修改一个view的尺寸时,通常是通过先将 self.view.fram赋值给一个临时变量,然后修改临时变量,最后将临时变量赋值给 self.view.frame.代码如下: // 1. ...
- 在OC中调用Swift类中定义delegate出现:Property 'delegate' not found on object of type ...
找了许久没找到答案, 在下面的链接中, 我解决了这个问题: http://stackoverflow.com/questions/26366082/cannot-access-property-of- ...
随机推荐
- 深度学习 + OpenCV,Python实现实时视频目标检测
使用 OpenCV 和 Python 对实时视频流进行深度学习目标检测是非常简单的,我们只需要组合一些合适的代码,接入实时视频,随后加入原有的目标检测功能. 在本文中我们将学习如何扩展原有的目标检测项 ...
- DNS(bind)服务器安装和配置
一.前言 DNS 域名系统(英文:Domain Name System,缩写:DNS)是因特网的一项服务.它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网.DNS使用TCP ...
- 设置IIS7/IIS7.5的FTP支持断点续传
Windows Server 2003的IIS自带FTP默认支持断点续传,但是Windows Server 2008/R2默认已经不支持,因此需要注意设置,才能让其支持断点续传,更好的利用宝贵的服务器 ...
- solr 请求参数过长报错,Solr配置maxBooleanClauses属性不生效原因分析
博客分类: 上次已经写过一篇关于solr中,查询条件过多的异常的文章,这次在总结扩展一下: 有时候我们的查询条件会非常多,由于solr的booleanquery默认设置的条件数为1024,所以超过 ...
- Jquery ajax 参数 详解
Jquery ajax 参数主要如下: url: 要求为String类型的参数,(默认为当前页地址)发送请求的地址. type: 要求为String类型的参数,请求方式(post或get)默认为get ...
- [Unity动画]05.Entry & Exit & Any State
0.状态机如下: Any State->Dying:isDying为true Dying->Reviving:isDying为false Reviving->Exit:isDying ...
- spring+mybatis 配置双数据源
配置好后,发现网上已经做好的了, 不过,跟我的稍有不同, 我这里再拿出来现个丑: properties 文件自不必说,关键是这里的xml: <?xml version="1.0&quo ...
- 监控msyql 连接数 及 各用户连接数
#!/bin/bash while true do date +%Y%m%d-%H:%M:%S mysql -uroot -p'xxx' -e "select count(1) from i ...
- PHP Yii2.0PHPexecl导入。
use app\models\execl; use \PHPExcel; /*execl导入数据*/ public function Execlupload(){ if(Yii::$app->r ...
- a标签自执行点击事件
//html <a href='http://www.baidu.com' ><button id='sss'>百度</button></a> //原生 ...