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.
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.
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
.
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
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
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.
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
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)
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.
dans Swift 4 cela fonctionne comme ci-dessous
collectionView.setContentOffset(CGPoint.zero, animated: true)