web-dev-qa-db-ja.com

SwiftではCGRectMake、CGPointMake、CGSizeMake、CGRectZero、CGPointZeroは使用できません。

最新のSwift 3.0にコードを変換した後、このエラーが表示されました。

enter image description here enter image description here

CGSize = CGSizeMake(0,0)の解決策を教えてください

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

どちらも利用できません。

229
niravdesai21

CGRectCGPointまたは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))

あるいはCGFloatDoubleIntの各値を指定したい場合は、このメソッドを使用できます。

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

CGRect.zeroCGRectZeroCGPointZeroCGPoint.zeroSwift 3.0に置き換えられました。

473
user6375148

CGRectMake、CGPointMake、CGSizeMakeのクイックフィックス in - Swift3&iOS10

これらの拡張機能を追加してください。

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 への素早い変換ができないため、これらの手順を実行することで時間を節約できます。

43

Swift 3では、CGRectZeroCGPointZeroの代わりにCGPoint.zeroまたはCGRect.zeroを使うことができます。

しかし、Swift 4では、CGRect.zero'CGPoint.zero'は動きます

25
guru

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フレームワークを呼び出す際のSwift-yのエクスペリエンスがさらに向上します。人気のあるフレームワークであるCore GraphicsとGrand Central Dispatchには、Swiftに新しく、よりクリーンなインターフェースがあります。

9
tem

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

それらをクラスの外に置くだけで、うまくいくはずです。 (少なくとも私のために働く)

9
CaOs433

Swift 3 Bonus: なぜ誰もがショートフォームに言及しなかったのですか?

CGRect(Origin: .zero, size: size)

.zeroの代わりにCGPoint.zero

型が定義されたら、それを省略してもかまいません。

5
Dmitry Isaev

以下を試してください。

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

これは Swift's の最新版です

5
BurakLGN

CGRectZeroの代わりにこれを使うことができます

CGRect.zero
2
jaskiratjd

Swift 4では 以下のように動作します

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

CGSize用

CGSize(width: self.view.frame.width * 3, height: self.view.frame.size.height)
0
Team chang