252

将代码转换为最新的 swift 3.0 后,我看到了这个错误。

在此处输入图像描述在此处输入图像描述

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

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

这也是不可用的。

4

11 回答 11

506

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

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))

或者,如果我们想指定CGFloatorDouble或中的每个值Int,我们可以使用这种方法。

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

CGRectZero&CGPointZero替换为CGRect.zero& CGPoint.zeroin Swift 3.0

于 2016-06-21T15:08:28.930 回答
51

在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

于 2016-09-29T11:09:17.653 回答
28

在 Swift 3 中,您可以简单地使用CGPoint.zeroorCGRect.zero代替CGRectZeroor CGPointZero

但是,在 Swift 4 中,CGRect.zero并且'CGPoint.zero'会工作

于 2016-10-12T06:07:55.620 回答
13

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

只需将它们放在任何课程之外,它就可以工作。(至少对我有用)

于 2017-08-17T17:56:06.597 回答
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)

苹果博客

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

于 2016-06-21T20:08:23.053 回答
6

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

CGRect(origin: .zero, size: size)

.zero代替CGPoint.zero

定义类型后,您可以放心地省略它。

于 2017-02-16T09:19:09.530 回答
5

尝试以下操作:

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

这是swift 的最新版本

于 2016-10-31T14:31:20.667 回答
3

您可以使用它来替换 CGRectZero

CGRect.zero
于 2018-10-15T08:27:15.130 回答
2

对于 CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
于 2019-04-14T18:37:38.723 回答
2

代替 CGSizeMake 添加CGSize它将起作用。CGSizeMake 用于目标 c。

你不想使用 make和 swift

于 2021-09-22T13:20:25.720 回答
1

在 Swift 4中,它的工作方式如下

collectionView.setContentOffset(CGPoint.zero, animated: true)
于 2018-06-18T06:47:45.370 回答