CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero ist in Swift nicht verfügbar


242

Nach dem Konvertieren von Code in den neuesten Swift 3.0 wird dieser Fehler angezeigt.

Geben Sie hier die Bildbeschreibung einGeben Sie hier die Bildbeschreibung ein

Sag mir auch Lösung für CGSize = CGSizeMake(0,0)

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

Welches ist auch nicht verfügbar.


Aber nachdem ich meinen vorherigen Code in swift3 konvertiert habe, habe ich dieses Problem bekommen und möchte wissen, ob sich die Syntax in der aktualisierten Version
geändert hat

Antworten:


493

CGRectKann einfach mit einer Instanz von a CGPointoder CGSizeerstellt werden.

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

Oder wenn wir jeden Wert in CGFloatoder Doubleoder angeben möchten Int, können wir diese Methode verwenden.

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

CGPoint Kann so erstellt werden.

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

CGSize Kann so erstellt werden.

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

Auch Größe und Punkt mit 0 als Werten können so gemacht werden.

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& CGPointZeroersetzt durch CGRect.zero& CGPoint.zeroin Swift 3.0.


Können Sie mir auch sagen, Lösung für CGSize = CGSizeMake (0,0), die nicht in schnellen 3
niravdesai21

@ niravdesai21 Die Frage wurde aktualisiert, bitte überprüfen.

CGPointZero und CGRectZero gibt es auch keine Lösung dafür? Aktualisierte Frage bitte Update Antwort
niravdesai21

@ niravdesai21 Aktualisiert.

4
"CGRectZero ist in Swift nicht verfügbar", wenn es sich tatsächlich um eine Syntaxänderung von CGRect handelt. Null ist ein Witz! Diese Jungs müssen sehr lange an ihren Kompilierungswarnungen arbeiten ... Sie verlassen sich auf Stack Overflow, um sie ständig zu retten
Magoo

49

Schnelle Lösung für CGRectMake, CGPointMake, CGSizeMake in Swift3 und iOS10

Fügen Sie diese Erweiterungen hinzu:

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

Gehen Sie dann zu " Suchen und Ersetzen im Arbeitsbereich ". Suchen Sie CGRectMake, CGPointMake, CGSizeMake und ersetzen Sie sie durch CGRect, CGPoint, CGSize

Diese Schritte sparen möglicherweise die ganze Zeit, da Xcode uns derzeit keine schnelle Konvertierung von Swift 2+ zu Swift 3 ermöglicht


Geniale Lösung!
Oprimus

@Oprimus hoffe, es reduziert Ihren Ärger :)
Rafat touqir Rafsun

26

In Swift 3 können Sie einfach CGPoint.zerooder CGRect.zeroanstelle von CGRectZerooder verwenden CGPointZero.

Allerdings in Swift 4 CGRect.zeround 'CGPoint.zero'wird funktionieren


1
@ChewieTheChorkie Sie haben Recht, das "einzige" Wort verursachte Verwirrung Ich habe das entfernt.
Guru

12

Wenn Sie sie wie in Swift 2 verwenden möchten, können Sie folgende Funktionen verwenden:

Für CGRectMake:

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

Für CGPointMake:

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

Für CGSizeMake:

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

Stellen Sie sie einfach außerhalb einer Klasse und es sollte funktionieren. (Funktioniert zumindest für mich)


9

Die Strukturen sowie alle anderen Symbole in Core Graphics und anderen APIs sind übersichtlicher geworden und enthalten auch Parameternamen. 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 Beispiel:

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

CGVector Beispiel:

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

CGSize-Beispiel:

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

CGRect Beispiel:

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

Apple Blog

Durch die schnelle Syntax- und API-Umbenennung in Swift 3 fühlt sich die Sprache natürlicher an und bietet eine noch schnellere Erfahrung beim Aufrufen von Cocoa-Frameworks. Beliebte Frameworks Core Graphics und Grand Central Dispatch verfügen über neue, viel sauberere Schnittstellen in Swift.


5

Versuche Folgendes:

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

Dies ist für die neueste Version des Swift


wie es (Y), wäre dies einfacher für die automatische Vervollständigung
Husam

5

Swift 3 Bonus: Warum hat niemand die Kurzform erwähnt?

CGRect(origin: .zero, size: size)

.zero anstatt CGPoint.zero

Wenn der Typ definiert ist, können Sie ihn sicher weglassen.


2

Sie können dies mit dem Ersatz von CGRectZero verwenden

CGRect.zero

0

In Swift 4 funktioniert es wie unten

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

0

Für CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.