Где CGRectGetMidX/Y в Swift 3

В Siwft 3 я не смог найти CGRectGetMidX и Y, которые я использовал для вычисления положения узлов. Также я не смог найти CGPointMake. В этом случае, как я могу установить узлы в центре SKScene?

Спасибо!

Update: Я создал node и указал его положение, написав таким образом:

let node = SKSpriteNode()
node.position = CGPoint(x:self.frame.size.width/2, y:self.frame.size.height/2)
node.size = CGSize(width: 100, height: 100)
node.color = SKColor.red
self.addChild(node)

Почему это где-то в другом месте, отличном от указанного места? Сначала я подумал, что в Swift3 произошли изменения, и дезинтеграция CGPointMake вызвала эту проблему, но похоже, что это не причина. В этом случае лучше использовать CGRect? Очень полезно, если бы вы могли написать код, исправляющий эту проблему. Еще раз спасибо за вашу помощь.

Ответ 1

В Swift вы не должны использовать эти старые обозначения стиля. Просто используйте конструкторы и свойства:

let point = CGPoint(x: 1, y: 2)
let rect = CGRect(x: 1, y: 2, width: 3, height: 4)
let mx = rect.midX

Ответ 2

C глобальные функции, такие как CGRectGetMidX/Y, CGPointMake и т.д., не должны использоваться в Swift (они устарели в Swift 2.2, удалены в Swift 3).

Быстрый импорт CGRect и CGPoint как родные типы, с инициализаторами, методами экземпляров и т.д. Они гораздо более естественны в использовании, и они не загрязняют глобальное пространство имен, как только выполняли функции C.

let point = CGPoint(x: 0, y: 0) //replacement of CGPointMake

let rect = CGRect(x: 0, y: 0, width: 5, height: 5) //replacement of CGRectMake

let midX = rect.midX //replacement of CGRectGetMidX
let midY = rect.midY //replacement of CGRectGetMidY

Ссылка на их ссылки на API выше связана. Вы также можете найти ссылку на CoreGraphics API.

Ответ 3

Слишком много центральных вычислений в вашем коде. Использовать это.

extension CGRect {
        var center : CGPoint  {
            get {
            return CGPoint(x:self.midX, y: self.midY)
            }
        }
    }