2016-06-21 4 views
187

После преобразования кода в последний swift 3.0 мне показана эта ошибка.CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero недоступен в Swift

enter image description hereenter image description here

Также скажите мне решение для CGSize = CGSizeMake(0,0)

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

который также недоступен.

+0

Но после преобразования моего предыдущего кода в swift3 я получил эту проблему, хотел бы знать, есть ли какие-либо изменения в синтаксисе в обновленной версии – niravdesai21

ответ

406

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 в Swift 3.0.

+0

Можете ли вы также сказать мне решение для CGSize = CGSizeMake (0 , 0), который не воюк в быстром 3 – niravdesai21

+0

@ niravdesai21 Обновлен вопрос, пожалуйста, проверьте. –

+0

CGPointZero и CGRectZero также не доступны для решения? Обновлен Вопрос обновите ответ – niravdesai21

8

Структуры, а также все другие символы в 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) 

Apple Blog

Swift синтаксис и API переименование изменения в Swift 3 сделать язык чувствовать себя более естественно, и обеспечить еще более Swift-й опыт при вызове рамки какао. В популярных средах Core Graphics и Grand Central Dispatch есть новые, более чистые интерфейсы в Swift.

39

Быстрое исправление для CGRectMake, CGPointMake, CGSizeMake в 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, CGP oint, CGSize

Эти шаги могут спасти все время, как Xcode сейчас не дает нам быстрое преобразование из Swift 2+ в Swift 3

+0

чертовски хорошая работа вокруг брата. + 1 –

+0

@AdrianP, спасибо mate –

+0

Блестящее решение! – Oprimus

20

В Swift 3, вы можете просто использовать CGPoint.zero или CGRect.zero вместо CGRectZero или CGPointZero.

Однако в Swift 4, только CGRect.zero будет работать

4

Попробуйте следующее:

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

Это для последней версии Свифта

+0

нравится (Y), это было бы проще для автозавершения – Husam

4

Swift 3 Бонус: Почему Didn Кто-нибудь упоминает короткую форму?

CGRect(origin: .zero, size: size) 

.zero вместо CGPoint.zero

Когда тип определен, то можно смело опустить.

2

Если вы хотите использовать их как в быстром 2, вы можете использовать эти funcs:

Для 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) 
} 

Просто поставьте их вне любого класса, и он должен работать. (Работает для меня как минимум)

 Смежные вопросы

  • Нет связанных вопросов^_^