Я ищу способ загрузки вычисленных CGPoints из plist (Xcode 6/Swift).Чтение вычисленных CGPoints из plist
Раньше я использовал CGPoints как Strings в plist в формате {160,450}, загружал строку и конвертировал ее с помощью CGPointFromString().
Поскольку я хочу, чтобы приложение работало на разных устройствах, мне нужно, чтобы эти CGPoints были относительно размера экрана.
Я думал, что можно ввести строку как {kScreenWidth/2, kScreenHeight * 3/4}, но, конечно, это не работает и возвращает CGPointZero. Я предполагаю, что могу написать свой собственный метод CGPointFromString, который учитывает мои константы, но я не знаю, как это сделать, и может быть лучшее решение без строк.
Можно ли сохранить и загрузить это как «данные» в plist? Я пробовал много, но не могу найти решение.
Любые идеи высоко оценены!
Вот код:
let points: [CGPoint]
init(levelNumber: Int) {
let levelDict = NSDictionary(contentsOfFile: NSBundle.mainBundle().pathForResource("level\(levelNumber + 1)", ofType: "plist")!)! {
self.points = []
if let pointsData = levelDict["pointsData"] as [NSDictionary]?
for item in pointsData {
let pointString = item["point"] as String
self.points.append(CGPointFromString(pointString))
}
}
}
Тогда я хотел бы создать CGPath из массива точек (знаете, как это сделать).
EDIT: Простое обновление, чтобы сделать мои намерения более ясными.
Мне нужно создать пути, которые будут одинаковыми на всех устройствах, относительно их размеров экрана. CGPoints для пути следует вводить вручную в plist для предварительной настройки нескольких путей. Они не должны вычисляться и сохраняться приложением во время выполнения.
Рассмотрим следующие объявления:
let kScreenWidth = UIScreen.mainScreen().bounds.width
let sprite = SKSpriteNode(color: UIColor.blackColor(), size: CGSize(width: kScreenWidth/4, height: kScreenWidth/4))
let bottomRight = CGPoint(x: kScreenWidth - sprite.size.width/2, y: 0.0)
В идеальном мире, я бы сохранить следующие два CGPoints в PLIST так же, как я мог бы установить позиции в коде и когда разворачивание, приложение будет знать, чтобы искать эти константы и получить их значение:
(х: kScreenWidth * 1/4, у: sprite.size.width/2)
bottomRight
Я ищу решение как можно ближе! Большое спасибо за помощь!
Вы заглянули в NSValue? –
Привет, Томас, спасибо за ваш ответ! Я сейчас общаюсь с NSValue, но я не понимаю, как я буду использовать его в своем случае. В каком формате мне нужно будет вводить мои CGPoints в plist (я делаю это вручную, чтобы настроить некоторые предварительно сконфигурированные пути, зависящие от размера экрана)? – nontomatic
Я тоже изучил это. NSValue, похоже, не является окончательным путем. Вы не можете сохранить его в NSDictionary. Это должно быть NSData. Я немного зациклен на том, как переложить это в другое. При первом предположении, синтаксический анализ, вероятно, будет проще. Разделите точку с запятой и используйте NSNumberFormatter –