CGRectMake, CGPointMake, CGSizeMake, CGRectZero, CGPointZero недоступен в Swift
после преобразования кода в последнюю версию swift 3.0 мне показана эта ошибка.
также скажите мне решение для CGSize = CGSizeMake(0,0)
static var frameAtStartOfPan: CGRect = CGRectZero
static var startPointOfPan: CGPoint = CGPointZero
, который также недоступен.
8 ответов:
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'
совместимость
структуры, а также все другие символы в основной графике и других 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
Swift синтаксис и переименование API изменения в Swift 3 делают язык более естественным и обеспечивают еще более быстрый опыт при вызове Cocoa Framework. Популярные фреймворки Core Graphics и Grand Central Dispatch имеют новые, гораздо более чистые интерфейсы в Swift.
попробуйте следующее:
var myToolBar = UIToolbar.init(frame: CGRect.init(x: 0, y: 0, width: 320, height: 44))
Это Свифт!--5--> последняя версия
Если вы хотите использовать их, как в 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) }
просто поставить их вне любого класса и он должен работать. (Для меня по крайней мере)