CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero недоступен в Swift

После преобразования кода в последний 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 в Swift 3.0 .

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

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

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

Однако в Swift 4 CGRect.zero и 'CGPoint.zero' будут работать

Структуры, а также все другие символы в Core Graphics и других API стали более чистыми, а также include имена параметров. 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

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

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

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

Это для последней версии Swift

Если вы хотите использовать их, как в 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) } 

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

Swift 3 Bonus: Почему никто не упомянул короткую форму?

 CGRect(origin: .zero, size: size) 

.zero вместо CGPoint.zero

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

В Swift 4 он работает, как показано ниже.

 collectionView.setContentOffset(CGPoint.zero, animated: true) 
Interesting Posts

Как объявить массив слабых ссылок в Swift?

Цвет фона альтернативной сетки в excel при изменении значения одного столбца?

Как закрыть приложения с помощью веб-камеры webcam dell?

Есть ли хороший плагин загрузки файлов jQuery для Drag-and-drop?

Рабочий пример углового материала 2.0 MdDialog с угловым 2,0

Является ли Secure.ANDROID_ID уникальным для каждого устройства?

Как указать разные каталоги вывода отладки / выпуска в файле QMake .pro

Получить индекс шаблона в строке с использованием регулярного выражения

Как использовать Drag-and-Drop в Swing для получения пути к файлу?

Устройство Ping за вторым интерфейсом того же маршрутизатора

Как передать непересекающиеся fragmentы из вектора в разные streamи?

Управление полосой пропускания при использовании GPRS в Windows 7

В чем преимущества использования ExecutorService?

C #: Как сделать Сито Аткина инкрементным

Wake on LAN перестала работать после установки Windows 7

Давайте будем гением компьютера.