CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero non sono disponibili in Swift

Dopo aver convertito il codice all’ultima versione 3.0 mi viene mostrato questo errore.

inserisci la descrizione dell'immagine qui inserisci la descrizione dell'immagine qui

Dimmi anche la soluzione per CGSize = CGSizeMake(0,0)

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

Che non è disponibile

CGRect può essere semplicemente creato utilizzando un’istanza di un CGPoint o CGSize , come indicato di seguito.

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

O se vogliamo specificare ogni valore in CGFloat o Double o Int , possiamo usare questo metodo.

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

CGPoint può essere creato in questo modo.

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

CGSize Può essere creato in questo modo.

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

Anche la dimensione e il punto con 0 come valori, può essere fatto in questo modo.

 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 sostituiti con CGRect.zero & CGPoint.zero in Swift 3.0 .

Correzione rapida per CGRectMake, CGPointMake, CGSizeMake in Swift3 e iOS10

Aggiungi queste estensioni:

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

Quindi vai su ” Trova e sostituisci nello spazio di lavoro ” Trova CGRectMake, CGPointMake, CGSizeMake e Sostituiscili con CGRect, CGPoint, CGSize

Questi passaggi potrebbero salvare tutto il tempo in quanto Xcode in questo momento non ci dà una rapida conversione da Swift 2+ a Swift 3

In Swift 3, puoi semplicemente utilizzare CGPoint.zero o CGRect.zero al posto di CGRectZero o CGPointZero .

Tuttavia, in Swift 4, CGRect.zero e 'CGPoint.zero' funzioneranno

Le strutture e tutti gli altri simboli in Core Graphics e altre API sono diventati più puliti e includono anche i nomi dei parametri. 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) 

Esempio di CGPoint:

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

Esempio di CGVector:

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

Esempio CGSize:

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

Esempio di CGRect:

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

Blog di Apple

La syntax Swift e le modifiche al cambio di nome dell’API in Swift 3 rendono il linguaggio più naturale e forniscono un’esperienza ancora più rapida quando si chiamano i framework Cocoa. I framework popolari Core Graphics e Grand Central Dispatch hanno nuove interfacce molto più pulite in Swift.

Prova quanto segue:

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

Questo è per l’ultima versione di Swift

Se vuoi usarli come in swift 2, puoi usare queste funzioni:

Per CGRectMake:

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

Per CGPointMake:

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

Per CGSizeMake:

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

Basta metterli fuori class e dovrebbe funzionare. (Funziona per me almeno)

Bonus Swift 3: perché nessuno ha menzionato il modulo breve?

 CGRect(origin: .zero, size: size) 

.zero invece di CGPoint.zero

Quando il tipo è definito, puoi tranquillamente ometterlo.

In Swift 4 funziona come sotto

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