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

问题描述 投票:230回答:10

将代码转换为最新的swift 3.0后,我显示此错误。

enter image description hereenter image description here

还告诉我CGSize = CGSizeMake(0,0)的解决方案

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

哪个也不可用。

uikit swift3 xcode8 ios10
10个回答
475
投票

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

同样大小并指向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

CGRectZeroCGPointZeroCGRect.zero取代了CGPoint.zeroSwift 3.0


0
投票

对于CGSize

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

45
投票

快速修复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现在不能让我们从Swift 2+快速转换到Swift 3


26
投票

在Swift 3中,您可以使用CGPoint.zeroCGRect.zero代替CGRectZeroCGPointZero

然而,在Swift 4中,CGRect.zero'CGPoint.zero'将会奏效


10
投票

如果你想在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)
}

把它们放在任何一个班级之外,它应该工作。 (至少对我有用)


9
投票

Core Graphics和其他API中的结构以及所有其他符号变得更清晰,并且还包括参数名称。 https://developer.apple.com/reference/coregraphics#symbols

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)

Apple博客

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


5
投票

请尝试以下方法:

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

这是swift的最新版本


5
投票

Swift 3 Bonus:为什么没有人提到短片?

CGRect(origin: .zero, size: size)

.zero而不是CGPoint.zero

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


2
投票

您可以使用它来替换CGRectZero

CGRect.zero

0
投票

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

collectionView.setContentOffset(CGPoint.zero, animated: true)
© www.soinside.com 2019 - 2024. All rights reserved.