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.

niravdesai21
sumber
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.


sumber
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

Rafat touqir Rafsun
sumber
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

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

CaOs433
sumber
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.

Edison
sumber
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

BurakLGN
sumber
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.

Dmitry Isaev
sumber
2

Anda dapat menggunakan ini dengan penggantian CGRectZero

CGRect.zero
jaskiratjd
sumber
0

Di Swift 4 bekerja seperti di bawah ini

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

Untuk CGSize

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
Perubahan tim
sumber