Sau khi chuyển đổi mã sang swift 3.0 mới nhất, tôi thấy lỗi này.
Cũng cho tôi biết giải pháp cho CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
Mà cũng không có.
Sau khi chuyển đổi mã sang swift 3.0 mới nhất, tôi thấy lỗi này.
Cũng cho tôi biết giải pháp cho CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
Mà cũng không có.
Câu trả lời:
CGRect
Có thể được tạo một cách đơn giản bằng cách sử dụng một thể hiện của một CGPoint
hoặc CGSize
, được đưa ra dưới đây.
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))
Hoặc nếu chúng ta muốn xác định mỗi giá trị trong CGFloat
hay Double
hay Int
, chúng ta có thể sử dụng phương pháp này.
let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int
CGPoint
Có thể được tạo ra như thế này.
let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int
CGSize
Có thể được tạo ra như thế này.
let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int
Ngoài ra kích thước và điểm với 0 là các giá trị, nó có thể được thực hiện như thế này.
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
thay thế bằng CGRect.zero
& CGPoint.zero
trong Swift 3.0
.
Khắc phục nhanh cho CGRectMake, CGPointMake, CGSizeMake trong Swift3 & iOS10
Thêm các tiện ích mở rộng này:
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)
}
}
Sau đó, đi đến " Tìm và thay thế trong không gian làm việc " Tìm CGRectMake, CGPointMake, CGSizeMake và thay thế chúng bằng CGRect, CGPoint, CGSize
Các bước này có thể tiết kiệm toàn bộ thời gian vì Xcode ngay bây giờ không cung cấp cho chúng tôi chuyển đổi nhanh từ Swift 2+ sang Swift 3
Nếu bạn muốn sử dụng chúng như trong swift 2, bạn có thể sử dụng các chức năng này:
Đối với CGRectMake:
func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}
Đối với CGPointMake:
func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
return CGPoint(x: x, y: y)
}
Đối với CGSizeMake:
func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
return CGSize(width: width, height: height)
}
Chỉ cần đặt chúng bên ngoài bất kỳ lớp học và nó sẽ làm việc. (Làm việc cho tôi ít nhất)
Các cấu trúc cũng như tất cả các biểu tượng khác trong Core Graphics và các API khác đã trở nên sạch hơn và cũng bao gồm các tên tham số. 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)
Ví dụ CGPoint:
let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)
Ví dụ về CGVector:
self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)
Ví dụ CGSize:
hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))
Ví dụ CGRect:
let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)
Blog của Apple
Cú pháp Swift và đổi tên API trong Swift 3 làm cho ngôn ngữ cảm thấy tự nhiên hơn và cung cấp trải nghiệm Swift-y thậm chí nhiều hơn khi gọi các khung công tác Cacao. Các khung phổ biến Core Graphics và Grand Central Dispatch có giao diện mới, gọn gàng hơn nhiều trong Swift.
Phần thưởng Swift 3: Tại sao không ai nhắc đến hình thức ngắn?
CGRect(origin: .zero, size: size)
.zero
thay vì CGPoint.zero
Khi loại được xác định, bạn có thể bỏ qua nó một cách an toàn.
Bạn có thể sử dụng điều này với sự thay thế của CGRectZero
CGRect.zero
Dành cho CGSize
CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)