CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero tidak tersedia di Swift


242

Setelah mengkonversi kode ke swift 3.0 terbaru saya ditunjukkan kesalahan ini.

masukkan deskripsi gambar di sinimasukkan deskripsi gambar di sini

Juga beri tahu saya solusi untuk CGSize = CGSizeMake(0,0)

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

Yang juga tidak tersedia.


Tetapi setelah mengonversi kode saya sebelumnya ke swift3 saya mendapatkan masalah ini, ingin tahu apakah ada perubahan dalam sintaks dalam versi yang diperbarui
niravdesai21

Jawaban:


493

CGRectDapat dengan mudah dibuat menggunakan contoh dari CGPointatau CGSize, itu diberikan di bawah ini.

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

Atau jika kita ingin menentukan setiap nilai dalam CGFloatatau Doubleatau Int, kita dapat menggunakan metode ini.

let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int

CGPoint Bisa dibuat seperti ini.

 let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int

CGSize Bisa dibuat seperti ini.

let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int

Juga ukuran dan titik dengan nilai 0, bisa dilakukan seperti ini.

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& CGPointZerodiganti dengan CGRect.zero& CGPoint.zerodalam Swift 3.0.


Dapatkah Anda juga memberi tahu saya solusi untuk CGSize = CGSizeMake (0,0) yang tidak terbangun dengan cepat 3
niravdesai21

@ niravdesai21 Memperbarui pertanyaan, silakan periksa.

CGPointZero dan CGRectZero juga tidak tersedia solusi untuk itu? Pertanyaan yang Diperbarui, mohon perbarui jawaban
niravdesai21

@ niravdesai21 Diperbarui.

4
"CGRectZero tidak tersedia di Swift" padahal sebenarnya itu adalah perubahan sintaks ke CGRect.zero adalah lelucon! Orang-orang ini perlu bekerja pada waktu peringatan kompilasi mereka ... Mereka mengandalkan Stack Overflow untuk menjamin mereka terus
Magoo

49

Perbaikan cepat untuk CGRectMake, CGPointMake, CGSizeMake di Swift3 & iOS10

Tambahkan ekstensi ini:

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

Lalu pergi ke " Temukan dan Ganti di Ruang Kerja " Temukan CGRectMake, CGPointMake, CGSizeMake dan Ganti dengan CGRect, CGPoint, CGSize

Langkah-langkah ini mungkin menghemat waktu karena Xcode saat ini tidak memberi kami konversi cepat dari Swift 2+ ke Swift 3


Solusi brilian!
Oprimus

@Oprimus harap ini mengurangi kerumitan Anda :)
Rafat touqir Rafsun

26

Di Swift 3, Anda cukup menggunakan CGPoint.zeroatau CGRect.zeromenggantikan CGRectZeroatau CGPointZero.

Namun, di Swift 4, CGRect.zerodan 'CGPoint.zero'akan bekerja


1
@ChewieTheChorkie Anda benar, "hanya" kata yang menciptakan kebingungan, saya telah menghapusnya.
guru

12

Jika Anda ingin menggunakannya seperti pada swift 2, Anda dapat menggunakan fungsi ini:

Untuk CGRectMake:

func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
    return CGRect(x: x, y: y, width: width, height: height)
}

Untuk CGPointMake:

func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
    return CGPoint(x: x, y: y)
}

Untuk CGSizeMake:

func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
    return CGSize(width: width, height: height)
}

Tempatkan mereka di luar kelas apa saja dan itu akan berhasil. (Setidaknya bekerja untuk saya)


9

Struktur serta semua simbol lainnya di Core Graphics dan API lainnya telah menjadi lebih bersih dan juga menyertakan nama parameter. 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)

Contoh CGPoint:

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

Contoh CGVector:

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

Contoh CGSize:

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

Contoh CGRect:

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

Blog Apple

Sintaks Swift dan perubahan penggantian nama API di Swift 3 membuat bahasa terasa lebih alami, dan memberikan pengalaman Swift-y yang bahkan lebih saat memanggil kerangka kerja Cocoa. Kerangka kerja yang populer Core Graphics dan Grand Central Dispatch memiliki antarmuka baru yang lebih bersih di Swift.


5

Coba yang berikut ini:

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

Ini untuk versi terbaru dari swift


seperti itu (Y), ini akan lebih mudah untuk penyelesaian otomatis
Husam

5

Bonus Swift 3: Mengapa tidak ada yang menyebutkan form pendek?

CGRect(origin: .zero, size: size)

.zero dari pada CGPoint.zero

Saat jenisnya ditentukan, Anda dapat dengan aman menghilangkannya.


2

Anda dapat menggunakan ini dengan penggantian CGRectZero

CGRect.zero

0

Di Swift 4 bekerja seperti di bawah ini

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

0

Untuk CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.