wake-up-neo.com

CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero ist in Swift nicht verfügbar

Nach dem Konvertieren von Code in den neuesten Swift 3.0 wird dieser Fehler angezeigt.

 enter image description here  enter image description here

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.

222
niravdesai21

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.

462
user6375148

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.

42

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'

25
guru

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. 

9
tymac

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)

9
CaOs433

Swift 3 Bonus: Warum hat niemand die Kurzform erwähnt?

CGRect(Origin: .zero, size: size)

.zeroanstelle vonCGPoint.zero

Wenn der Typ definiert ist, können Sie ihn sicher weglassen.

5
Dmitry Isaev

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

5
BurakLGN

Sie können dies mit dem Austausch von CGRectZero verwenden

CGRect.zero
1
jaskiratjd

In Swift 4 es funktioniert wie unten

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

Für CGSize

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