코드를 최신 swift 3.0으로 변환 한 후이 오류가 표시됩니다.
또한 해결책을 알려주세요 CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
어느 것도 사용할 수 없습니다.
코드를 최신 swift 3.0으로 변환 한 후이 오류가 표시됩니다.
또한 해결책을 알려주세요 CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
어느 것도 사용할 수 없습니다.
답변:
CGRect
아래 주어진 CGPoint
또는 의 인스턴스를 사용하여 간단하게 만들 수 있습니다 CGSize
.
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))
아니면 각각의 값을 지정하려는 경우 CGFloat
또는 Double
또는 Int
우리는이 방법을 사용할 수 있습니다.
let rect = CGRect(x: 0, y: 0, width: 100, height: 100) // CGFloat, Double, Int
CGPoint
이렇게 만들 수 있습니다.
let point = CGPoint(x: 0,y :0) // CGFloat, Double, Int
CGSize
이렇게 만들 수 있습니다.
let size = CGSize(width: 100, height: 100) // CGFloat, Double, Int
또한 크기와 값을 0으로 지정하면 다음과 같이 수행 할 수 있습니다.
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
는 CGRect.zero
& CGPoint.zero
in으로 대체 되었습니다 Swift 3.0
.
Swift3 및 iOS10 에서 CGRectMake, CGPointMake, CGSizeMake 에 대한 빠른 수정
이 확장을 추가하십시오 :
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)
}
}
그런 다음 " 작업 공간에서 찾기 및 바꾸기 "로 이동하여 CGRectMake, CGPointMake, CGSizeMake를 찾아 CGRect, CGPoint, CGSize로 바꿉니다.
Xcode가 Swift 2+ 에서 Swift 3으로 빠른 변환을 제공하지 않기 때문에이 단계는 시간을 절약 할 수 있습니다.
신속한 2에서와 같이 사용하려면 다음 기능을 사용할 수 있습니다.
CGRectMake의 경우 :
func CGRectMake(_ x: CGFloat, _ y: CGFloat, _ width: CGFloat, _ height: CGFloat) -> CGRect {
return CGRect(x: x, y: y, width: width, height: height)
}
CGPointMake의 경우 :
func CGPointMake(_ x: CGFloat, _ y: CGFloat) -> CGPoint {
return CGPoint(x: x, y: y)
}
CGSizeMake의 경우 :
func CGSizeMake(_ width: CGFloat, _ height: CGFloat) -> CGSize {
return CGSize(width: width, height: height)
}
클래스 외부에 배치하면 작동합니다. (적어도 나를 위해 작동)
Core Graphics 및 기타 API의 구조 및 기타 모든 심볼이 더 깔끔해졌으며 매개 변수 이름도 포함되었습니다. 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 예 :
let newPoint = stackMid.convert(CGPoint(x: -10, y: 10), to: self)
CGVector 예 :
self.physicsWorld.gravity = CGVector(dx: 0, dy: gravity)
CGSize 예 :
hero.physicsBody = SKPhysicsBody(rectangleOf: CGSize(width: 16, height: 18))
CGRect 예 :
let back = SKShapeNode(rect: CGRect(x: 0-120, y: 1024-200-30, width: 240, height: 140), cornerRadius: 20)
애플 블로그
Swift 3의 Swift 구문 및 API 이름 변경으로 언어가보다 자연스럽게 느껴지고 Cocoa 프레임 워크를 호출 할 때 훨씬 더 빠른 경험을 제공합니다. 널리 사용되는 프레임 워크 Core Graphics 및 Grand Central Dispatch에는 Swift에서 새롭고 훨씬 깨끗한 인터페이스가 있습니다.
스위프트 3 보너스 : 왜 짧은 형식을 언급하지 않았습니까?
CGRect(origin: .zero, size: size)
.zero
대신에 CGPoint.zero
유형이 정의되면 안전하게 생략 할 수 있습니다.
CGRectZero를 대체하여 사용할 수 있습니다
CGRect.zero