2016-06-21 10 views
187

Nach dem Konvertieren von Code zu neuesten swift 3.0 Ich habe diesen Fehler angezeigt.CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero ist nicht verfügbar in Swift

enter image description hereenter image description here

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

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

Welche auch nicht verfügbar ist.

+0

Aber nach dem Konvertieren meines vorherigen Code zu swift3 habe ich dieses Problem, würde gerne wissen, ob es irgendwelche Änderungen in der Syntax in der aktualisierten Version – niravdesai21

Antwort

406

CGRect Kann einfach mit einer Instanz von CGPoint oder CGSize, die unten angegeben ist, erstellt 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 CGFloat oder Double oder Int angeben möchten, können wir diese Methode verwenden.

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

CGPoint Kann wie folgt erstellt werden.

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

CGSize Kann so erstellt werden.

Auch Größe und Punkt mit 0 als die Werte, es kann 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 & CGPointZero mit CGRect.zero & CGPoint.zero in Swift 3.0 ersetzt.

+0

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

+0

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

+0

CGPointZero und CGRectZero ist auch keine Lösung dafür? Aktualisierte Frage aktualisieren Sie bitte die Antwort – niravdesai21

8

Die Strukturen sowie alle anderen Symbole in Core Graphics und anderen APIs wurden sauberer 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

Swift Syntax und API Umbenennung Änderungen in Swift 3 machen die Sprache natürlicher fühlen, und bieten eine noch Swift-y Erfahrung als Cocoa-Frameworks aufrufen. Beliebte Frameworks Core Graphics und Grand Central Dispatch haben in Swift neue, viel sauberere Schnittstellen.

39

Quick Fix für CGRectMake, CGPointMake, CGSizeMake in swift3 & iOS10

diese Erweiterungen hinzufügen:

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

Dann gehen "Suchen und Ersetzen in Workspace" finden CGRectMake, CGPointMake, CGSizeMake und ersetzen Sie sie durch CGRect, CGP unkt, CGSize

Diese Schritte könnten die ganze Zeit sparen als Xcode jetzt nicht uns schnelle Umwandlung von Swift 2+ nicht geben zu Swift 3

+0

verdammt gute Arbeit um Bruder. + 1 –

+0

@AdrianP, danke mate –

+0

Brilliante Lösung! – Oprimus

20

In Swift 3, können Sie einfach CGPoint.zero verwenden oder CGRect.zero anstelle von CGRectZero oder CGPointZero.

jedoch in Swift 4 nur CGRect.zero arbeiten

4

Versuchen Sie Folgendes:

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

Dies ist für die der swift neueste Version

+0

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

4

Swift 3 Bonus: Warum didn Erwähnt niemand die Kurzform?

CGRect(origin: .zero, size: size) 

.zero statt CGPoint.zero

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

2

Wenn man sie wie in swift 2 verwenden möchten, können Sie diese funcs 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) 
} 

Lege sie einfach außerhalb jeder Klasse ab und es sollte funktionieren. (Funktioniert für mich mindestens)

Verwandte Themen