web-dev-qa-db-fra.com

CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero n'est pas disponible dans Swift.

Après la conversion du code vers la dernière version de Swift 3.0, cette erreur s’affiche.

 enter image description here  enter image description here

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

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

Ce qui est également indisponible.

222
niravdesai21

CGRect Peut être simplement créé en utilisant une instance de CGPoint ou CGSize, donnée 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

Également 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 dans Swift 3.0.

462
user6375148

Solution rapide pour CGRectMake, CGPointMake, CGSizeMake in Swift3 & 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)
    }
}

Cliquez ensuite sur " Rechercher et remplacer dans l'espace de travail " Recherchez CGRectMake, CGPointMake, CGSizeMake et remplacez-les par CGRect, CGPoint, CGSize.

Ces étapes pourraient faire gagner du temps, car Xcode ne nous permet pas pour l'instant de convertir rapidement de Swift 2+ à Swift 3

42
Rafat touqir Rafsun

Dans Swift 3, vous pouvez simplement utiliser CGPoint.zero ou CGRect.zero au lieu de CGRectZero ou CGPointZero.

Cependant, dans Swift 4, CGRect.zero et 'CGPoint.zero' fonctionneront

25
guru

Les structures ainsi que tous les autres symboles de Core Graphics et d'autres API sont devenus plus propres et incluent é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 CGPoint:

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

Exemple CGVector:

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

Exemple CGSize:

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

Exemple CGRect:

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

Apple Blog

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

9
tymac

Si vous voulez les utiliser comme dans Swift 2, vous pouvez utiliser les fonctions suivantes:

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 mettre en dehors de n'importe quelle classe et cela devrait fonctionner. (Fonctionne pour moi au moins)

9
CaOs433

Swift 3 Bonus: Pourquoi personne n’a mentionné le formulaire abrégé?

CGRect(Origin: .zero, size: size)

.zeroau lieu deCGPoint.zero

Une fois le type défini, vous pouvez l’omettre en toute sécurité.

5
Dmitry Isaev

Essayez ce qui suit: 

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

Ceci est pour le Swift's dernière version

5
BurakLGN

Vous pouvez l'utiliser avec le remplacement de CGRectZero

CGRect.zero
1
jaskiratjd

Dans Swift 4 cela fonctionne comme ci-dessous

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

Pour CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
0
Team chang