251 votes

CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero ne sont pas disponibles en Swift.

Après avoir converti le code dans la dernière version de Swift 3.0, j'obtiens cette erreur.

enter image description hereenter image description here

Dites-moi aussi la solution pour CGSize = CGSizeMake(0,0)

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

Qui est également indisponible.

0 votes

Mais après avoir converti mon code précédent en swift3, j'ai eu ce problème. Je voudrais savoir si la syntaxe a été modifiée dans la version mise à jour.

505voto

CGRect Il peut être créé simplement en utilisant une instance d'un CGPoint ou CGSize c'est ce qui est donné ci-dessous.

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

Ou si nous voulons spécifier chaque valeur dans CGFloat ou Double ou Int nous pouvons utiliser cette méthode.

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

CGPoint Peut être créé comme ceci.

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

CGSize Peut être créé comme ceci.

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

De même, la taille et le point avec 0 comme valeurs, cela peut être fait comme ceci.

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 remplacé par CGRect.zero & CGPoint.zero en Swift 3.0 .

51voto

Une solution rapide pour CGRectMake , CGPointMake , CGSizeMake en Swift3 et iOS10

Ajoutez ces extensions :

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

Ensuite, allez sur " Rechercher et remplacer dans l'espace de travail " Trouvez CGRectMake , CGPointMake, CGSizeMake et les remplacer par CGRect , CGPoint, CGSize

Ces étapes peuvent nous faire gagner du temps, car Xcode ne permet pas actuellement de convertir rapidement les données d'une page à l'autre. Swift 2+ a Swift 3

0 votes

Brillante solution !

0 votes

@Oprimus j'espère que cela réduira vos ennuis :)

28voto

guru Points 102

En Swift 3, vous pouvez simplement utiliser CGPoint.zero ou CGRect.zero à la place de CGRectZero ou CGPointZero .

Cependant, dans Swift 4, CGRect.zero y 'CGPoint.zero' fonctionnera

13voto

CaOs433 Points 83

Si vous voulez les utiliser comme dans swift 2, vous pouvez utiliser ces fonctions :

Pour CGRectMake :

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

Pour CGPointMake :

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

Pour CGSizeMake :

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

Il suffit de les placer en dehors de toute classe et cela devrait fonctionner. (Cela fonctionne pour moi en tout cas)

9voto

tymac Points 7397

Les structures ainsi que tous les autres symboles dans Core Graphics et d'autres API sont devenus plus propres et comprennent également des noms de paramètres. 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)

Exemple de CGPoint :

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

CGVector Exemple :

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

CGSize Exemple :

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

CGRect Exemple :

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

Blogue d'Apple

Les modifications apportées à la syntaxe Swift et au renommage des API dans Swift 3 rendent le langage plus naturel et offrent une expérience encore plus Swifty lors de l'appel de frameworks Cocoa. Les frameworks populaires Core Graphics et Grand Central Dispatch ont de nouvelles interfaces beaucoup plus propres en Swift.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X