web-dev-qa-db-fra.com

Où est CGRectGetMidX/Y dans Swift 3

Dans Siwft 3, je ne pouvais pas trouver CGRectGetMidX et Y que j’utilisais pour calculer la position des nœuds. Aussi, je n'ai pas trouvé CGPointMake. Dans ce cas, comment puis-je définir des nœuds au centre de SKScene? 

Merci!

Mise à jour: J'ai créé un nœud et spécifié sa position en écrivant de cette façon;

let node = SKSpriteNode()
node.position = CGPoint(x:self.frame.size.width/2, y:self.frame.size.height/2)
node.size = CGSize(width: 100, height: 100)
node.color = SKColor.red
self.addChild(node)

Pourquoi est-ce que c'est quelque part comme un endroit différent de l'endroit spécifié? J'ai d'abord pensé qu'il y avait un changement dans Swift3 et que la dépresciation de CGPointMake était à l'origine de ce problème, mais il ne semble pas que ce soit la cause. Dans ce cas, l'utilisation de CGRect est-elle meilleure? Il est très utile d’écrire du code qui corrige ce problème de position. Merci encore pour votre aide.

14
bagels

Dans Swift, vous ne devriez pas utiliser ces notations de style ancien. Il suffit d'utiliser les constructeurs et propriétés:

let point = CGPoint(x: 1, y: 2)
let rect = CGRect(x: 1, y: 2, width: 3, height: 4)
let mx = rect.midX
35
Sami Kuhmonen

Les fonctions globales C telles que CGRectGetMidXY, CGPointMake, ETC. NE DOIVENT PAS ÊTRE UTILISÉES DANS SWIFT (ELLES SONT OBSOLÈTES DANS SWIFT 2.2 ET SUPPRIMÉES DANS SWIFT 3). 

SWIFT IMPORTE _/CGRect et CGPoint sous forme de types natifs, avec initialiseurs, méthodes d'instance, etc. .

let point = CGPoint(x: 0, y: 0) //replacement of CGPointMake

let rect = CGRect(x: 0, y: 0, width: 5, height: 5) //replacement of CGRectMake

let midX = rect.midX //replacement of CGRectGetMidX
let midY = rect.midY //replacement of CGRectGetMidY

Leur référence API de respect est liée ci-dessus. Vous pouvez également trouver la référence de l'API CoreGraphics également très pratique.

5
Alexander

Avoir trop de calculs centraux dans votre code. Utilisez ceci. 

extension CGRect {
        var center : CGPoint  {
            get {
            return CGPoint(x:self.midX, y: self.midY)
            }
        }
    }
0
Mohammad Sadiq