[uikit] 스위프트에서는 CGRectMake, CGPointMake, CGSizeMake, CGRectZero, 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& CGPointZeroCGRect.zero& CGPoint.zeroin으로 대체 되었습니다 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으로 빠른 변환을 제공하지 않기 때문에이 단계는 시간을 절약 할 수 있습니다.


답변

스위프트 3, 당신은 간단하게 사용할 수 있습니다 CGPoint.zero또는 CGRect.zero대신에 CGRectZero또는 CGPointZero.

그러나 스위프트 4, CGRect.zero'CGPoint.zero'작동


답변

신속한 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에서 새롭고 훨씬 깨끗한 인터페이스가 있습니다.


답변

다음을 시도하십시오 :

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

이것은 스위프트의 최신 버전입니다


답변

스위프트 3 보너스 : 왜 짧은 형식을 언급하지 않았습니까?

CGRect(origin: .zero, size: size)

.zero 대신에 CGPoint.zero

유형이 정의되면 안전하게 생략 할 수 있습니다.