Как получить исходный масштаб изображения из SKTexture?

Я использую набор спрайтов в Swift и настраиваю текстуры с помощью функции SKTexture(rect:inTexture:). Я не использую встроенные атласы текстур, вместо этого я создаю родительскую текстуру (атлас текстур) с помощью SKTexture(imageNamed:). Это потому, что у меня уже есть атласы и положения подтекстур (в пикселях) в моих файлах данных, а не отдельные изображения.

Таким образом, .size() объекта SKTexture является правильным, когда изображение @2x (размер составляет половину размера пикселя). Я вычисляю координаты подпрямоугольника (которые находятся в координатах единицы, 0-1) путем деления на размер, но мне нужно знать исходный масштаб изображения, чтобы я мог разделить на него размеры в пикселях.

Вот мой код, который хорошо работает:

// Create the texture as a sub-rect of the parent texture
if  let parentTexture = textures[parentTextureId] {
    let size = parentTexture.size()
    var subRect = CGRectFromString(subRectString)
    subRect = CGRectMake(
        (subRect.origin.x / 2) / size.width,
        (size.height - ((subRect.origin.y / 2) + (subRect.size.height / 2))) / size.height,
        (subRect.size.width / 2) / size.width,
        (subRect.size.height / 2) / size.height)
    let texture = SKTexture(rect: subRect, inTexture: parentTexture)
    textures[textureId] = texture
}

Проблема в том, что мне пришлось жестко запрограммировать все эти / 2 настройки масштаба. Как я могу получить исходный масштаб изображения (или фактические размеры в пикселях) текстуры, чтобы я мог правильно вычислить суб-прямоугольник без жесткого кодирования?


person jhabbott    schedule 27.04.2015    source источник
comment
Если вы создаете свое собственное изображение атласа текстуры, разве вы не должны уже знать размер для каждого дополнительного изображения?   -  person sangony    schedule 27.04.2015
comment
Да, я знаю размер в пикселях, но я не знаю масштаб изображения в общем коде, который должен быть способен загружать изображения 1x или 2x (в зависимости от того, что доступно) на дисплеях 1x или 2x.   -  person jhabbott    schedule 27.04.2015