CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero在Swift中不可用

转换代码到最新的swift 3.0后,我显示这个错误。

enter image description hereenter image description here

也告诉我解决CGSize = CGSizeMake(0,0)

static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero

这也是不可用的。

170115 次浏览

CGRect可以简单地使用CGPointCGSize的实例创建,如下所示。

let rect = CGRect(origin: CGPoint(x: 0,y :0), size: CGSize(width: 100, height: 100))


// Or


let rect = CGRect(origin: .zero, size: CGSize(width: 100, height: 100))

或者如果我们想在CGFloatDoubleInt中指定每个值,可以使用此方法。

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int

CGPoint可以像这样创建。

 let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int

CGSize可以像这样创建。

let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int

同样,size和point的值为0,也可以这样做。

let size = CGSize.zero // width = 0, height = 0
let point = CGPoint.zero // x = 0, y = 0, equal to CGPointZero
let rect = CGRect.zero // equal to CGRectZero

CGRectZero,CGPointZero替换为CGRect.zero &Swift 3.0中的CGPoint.zero

核心图形和其他api中的结构以及所有其他符号都变得更加清晰,还包括参数名称。 https://developer.apple.com/reference/coregraphics#symbols < / p >
CGRect(x: Int, y: Int, width: Int, height: Int)
CGVector(dx: Int, dy: Int)
CGPoint(x: Double, y: Double)
CGSize(width: Int, height: Int)

CGPoint例子:

let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)

CGVector例子:

self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)

CGSize例子:

hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))

CGRect中例子:

let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)

苹果博客

Swift 3中的Swift语法和API重命名的变化使语言感觉更自然,并且在调用Cocoa框架时提供了更Swift的体验。流行的框架Core Graphics和Grand Central Dispatch在Swift中有新的、更清晰的界面。

Swift3,iOS10中快速修复CGRectMake, CGPointMake, CGSizeMake

添加以下扩展:

extension CGRect{
init(_ x:CGFloat,_ y:CGFloat,_ width:CGFloat,_ height:CGFloat) {
self.init(x:x,y:y,width:width,height:height)
}


}
extension CGSize{
init(_ width:CGFloat,_ height:CGFloat) {
self.init(width:width,height:height)
}
}
extension CGPoint{
init(_ x:CGFloat,_ y:CGFloat) {
self.init(x:x,y:y)
}
}

然后去"在工作区中查找和替换" 找到CGRectMake, CGPointMake, CGSizeMake并将它们替换为CGRect CGPoint CGSize

这些步骤可能会节省所有的时间,因为Xcode目前不能给我们从斯威夫特2 +斯威夫特3的快速转换

在Swift 3中,你可以简单地使用CGPoint.zeroCGRect.zero来代替CGRectZeroCGPointZero

然而,在Swift 4中,CGRect.zero'CGPoint.zero'将工作

试试下面的方法:

var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))

这是针对斯威夫特的的最新版本

为什么没有人提到缩写形式?

CGRect(origin: .zero, size: size)

.zero代替CGPoint.zero

定义了类型后,可以安全地省略它。

如果你想在swift 2中使用它们,你可以使用这些函数:

CGRectMake:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}

CGPointMake:

func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
return CGPoint(x: x, y: y)
}

CGSizeMake:

func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
return CGSize(width: width, height: height)
}

只要把它们放在任何课程之外,它就会起作用。(至少对我有用)

在Swift 4中它的工作原理如下

collectionView.setContentOffset(CGPoint.zero, animated: true)

你可以用CGRectZero替换它

CGRect.zero

对于CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)

而不是CGSizeMake添加CGSize它将工作。 在objective c中使用CGSizeMake。

你不希望在swift中使用使