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

après avoir converti le code à la dernière version de swift 3.0, on m'a montré cette erreur.

enter image description here enter image description here

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

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

qui n'est pas non plus disponible.

210
demandé sur Peter O. 2016-06-21 17:19:52

8 réponses

CGRect peut être créé simplement en utilisant une instance de CGPoint ou CGSize , comme indiqué 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 de 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

Also taille et avec 0 comme valeur, il peut être fait comme ça.

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 et CGPoint.zero dans Swift 3.0 .

440
répondu 2017-06-28 15:49:52

Quick fix for CGRectMake, Cgpointtmake, CGSizeMake in Swift3 & iOS10 151960920"

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

puis allez à" trouver et remplacer dans L'espace de travail " Trouver CGRectMake, CGPointMake, CGSizeMake et les remplacer par CGRect, CGPoint, CGSize "1519130920

ces étapes pourraient sauver tous le temps que Xcode en ce moment ne nous donne pas la conversion rapide de Swift 2+ à Swift 3

41
répondu Rafat touqir Rafsun 2016-09-29 11:09:17

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

24
répondu guru 2018-07-20 05:25:45

les structures ainsi que tous les autres symboles dans les graphiques de base et 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)

CGPoint Example:

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

CGVector Example:

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

CGSize Example:

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

CGRect Example:

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

Apple Blog

la syntaxe Swift et les changements de nom D'API dans Swift 3 rendent le langage plus naturel, et fournissent une expérience encore plus rapide-y lors de l'appel de cadres de cacao. Les cadres graphiques de base populaires et Grand Central Dispatch ont de nouvelles interfaces beaucoup plus propres dans Swift.

9
répondu tymac 2016-06-22 00:33:57

essayez ce qui suit:

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

C'est pour le de swift dernière version

5
répondu BurakLGN 2016-10-31 15:31:14

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

mettez-les juste en dehors de n'importe quelle classe et ça devrait marcher. (Pour moi au moins)

5
répondu CaOs433 2017-08-17 18:59:06

Bonus Swift 3: pourquoi personne n'a mentionné la forme courte?

CGRect(origin: .zero, size: size)

.zero au lieu de CGPoint.zero

Lorsque le type est défini, vous pouvez l'omettre.

4
répondu Dmitry Isaev 2017-02-16 09:19:09

dans Swift 4 cela fonctionne comme ci-dessous

collectionView.setContentOffset(CGPoint.zero, animated: true)
0
répondu Neha 2018-06-18 06:47:45