Nach dem Konvertieren von Code in den neuesten Swift 3.0 wird dieser Fehler angezeigt.
Sag mir auch eine Lösung für CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
Welches ist auch nicht verfügbar.
CGRect
Kann einfach mit einer Instanz einer CGPoint
oder CGSize
erstellt werden, die unten angegeben ist.
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))
Wenn Sie jeden Wert in CGFloat
oder Double
oder Int
angeben möchten, können Sie diese Methode verwenden.
let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int
CGPoint
Kann so erstellt werden.
let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int
CGSize
Kann so erstellt werden.
let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int
Auch Größe und Punkt mit 0 als Werte können so gemacht werden.
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
wurde durch CGRect.zero
& CGPoint.zero
in Swift 3.0
ersetzt.
Schnelle Lösung für CGRectMake, CGPointMake, CGSizeMake in Swift3 & iOS10
Fügen Sie diese Erweiterungen hinzu:
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)
}
}
Dann gehen Sie zu " Suchen und Ersetzen in Workspace " Suchen Sie CGRectMake, CGPointMake, CGSizeMake und ersetzen Sie sie mit CGRect, CGPoint, CGSize.
Diese Schritte können die ganze Zeit sparen, da Xcode momentan keine schnelle Konvertierung von Swift 2+ nach Swift 3 ermöglicht.
In Swift 3 können Sie einfach CGPoint.zero
oder CGRect.zero
anstelle von CGRectZero
oder CGPointZero
verwenden.
In Swift 4 funktionieren jedoch CGRect.zero
und 'CGPoint.zero'
Die Strukturen sowie alle anderen Symbole in Core Graphics und anderen APIs wurden sauberer und enthalten auch Parameternamen. 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-Beispiel:
let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)
CGVector-Beispiel:
self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)
CGSize-Beispiel:
hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))
CGRect-Beispiel:
let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)
Apple-Blog
Durch die schnelle Änderung der Syntax und der API-Umbenennung in Swift 3 wird die Sprache natürlicher und das Aufrufen von Cocoa-Frameworks noch schneller. Die gängigen Frameworks Core Graphics und Grand Central Dispatch haben in Swift neue, deutlich sauberere Schnittstellen.
Wenn Sie sie wie in Swift 2 verwenden möchten, können Sie diese Funktionen verwenden:
Für CGRectMake:
func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}
Für CGPointMake:
func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
return CGPoint(x: x, y: y)
}
Für CGSizeMake:
func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
return CGSize(width: width, height: height)
}
Lege sie einfach außerhalb einer Klasse und es sollte funktionieren. (Funktioniert zumindest für mich)
Swift 3 Bonus: Warum hat niemand die Kurzform erwähnt?
CGRect(Origin: .zero, size: size)
.zero
anstelle vonCGPoint.zero
Wenn der Typ definiert ist, können Sie ihn sicher weglassen.
Versuche Folgendes:
var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))
Dies ist für die Swift's neueste Version
Sie können dies mit dem Austausch von CGRectZero verwenden
CGRect.zero
In Swift 4 es funktioniert wie unten
collectionView.setContentOffset(CGPoint.zero, animated: true)
Für CGSize
CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)