uikit - cgrectmake is unavailable in swift 4
CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero no está disponible en Swift (10)
En Swift 3, simplemente puede usar
CGPoint.zero
o
CGRect.zero
en lugar de
CGRectZero
o
CGPointZero
.
Sin embargo, en Swift 4,
CGRect.zero
y
''CGPoint.zero''
funcionarán
Intenta lo siguiente:
var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))
Esto es para la última versión de Swift
Las estructuras, así como todos los demás símbolos en Core Graphics y otras API, se han vuelto más limpios y también incluyen nombres de parámetros. 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)
Ejemplo de CGPoint:
let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)
Ejemplo de CGVector:
self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)
Ejemplo de CGSize:
hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))
Ejemplo de CGRect:
let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)
Blog de Apple
La sintaxis de Swift y los cambios de cambio de nombre de API en Swift 3 hacen que el lenguaje se sienta más natural y brindan una experiencia Swift-y aún mayor al llamar a los marcos de Cocoa. Los marcos populares Core Graphics y Grand Central Dispatch tienen interfaces nuevas y mucho más limpias en Swift.
Para CGSize
CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
Puede usar esto con el reemplazo de CGRectZero
CGRect.zero
Si desea usarlos como en swift 2, puede usar estas funciones:
Para CGRectMake:
func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}
Para CGPointMake:
func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
return CGPoint(x: x, y: y)
}
Para CGSizeMake:
func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
return CGSize(width: width, height: height)
}
Simplemente colóquelos fuera de cualquier clase y debería funcionar. (Funciona para mí al menos)
CGRect
puede crear simplemente usando una instancia de
CGPoint
o
CGSize
, que se proporciona a continuación.
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))
O si queremos especificar cada valor en
CGFloat
o
Double
o
Int
, podemos usar este método.
let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int
CGPoint
puede crear así.
let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int
CGSize
puede crear así.
let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int
También tamaño y punto con 0 como valores, se puede hacer así.
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
y
CGPointZero
reemplazaron con
CGRect.zero
y
CGPoint.zero
en
Swift 3.0
.
Bono Swift 3: ¿Por qué nadie mencionó la forma corta?
CGRect(origin: .zero, size: size)
.zero
lugar de
CGPoint.zero
Cuando se define el tipo, puede omitirlo de forma segura.
En Swift 4 funciona como a continuación
collectionView.setContentOffset(CGPoint.zero, animated: true)
Solución rápida para CGRectMake, CGPointMake, CGSizeMake en Swift3 y iOS10
Agregue estas extensiones:
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)
}
}
Luego vaya a " Buscar y reemplazar en el espacio de trabajo ", encuentre CGRectMake, CGPointMake, CGSizeMake y reemplácelos con CGRect, CGPoint, CGSize
Estos pasos pueden ahorrar todo el tiempo ya que Xcode en este momento no nos da una conversión rápida de Swift 2+ a Swift 3