2017-02-15 6 views
3

У меня есть счетчик денег, который увеличивается с течением времени, который я хочу оживить, я использую нижнее расширение для запуска анимации, но проблема в том, что он оживляет всю метку, когда мне нужны только цифры которые меняются для анимации.Получение определенного десятичного знака

Я понял, что я бы разделил цифры и анимировал каждую отдельную цифру самостоятельно, проблема в том, что я не могу понять, как сломать номер и получить конкретные цифры.

Есть ли способ, по которому я могу сломать номер и получить отдельные цифры или лучший способ запуска анимации на отдельные номера?

func pushTransition(duration:CFTimeInterval) { 
    let animation:CATransition = CATransition() 
    animation.timingFunction = CAMediaTimingFunction(name: 
     kCAMediaTimingFunctionEaseInEaseOut) 
    animation.type = kCATransitionPush 
    animation.subtype = kCATransitionFromTop 
    animation.duration = duration 
    self.layer.add(animation, forKey: kCATransitionPush) 
} 



if let aLabel = self.money{ 
     aLabel.pushTransition(duration: 0.2) 
     aLabel.text = "$\(strRoundDollars)" 
     money.sizeToFit() 
     } 

ответ

2

Во-первых, вы хотите использовать NumberFormatter вместо простой интерполяции строк, чтобы вы всегда имели правильное количество знаков после запятой & знак валюты и т. Д. Для вашего региона/валюты. Тогда все, что вам нужно сделать, это отобразить .characters свойство строки обратно в массив строк:

let dollars = 123.4 
let n = NumberFormatter() 
n.numberStyle = .currency 
n.locale = Locale.autoupdatingCurrent // or whatever locale you want 
if let text = n.string(from: NSNumber(value: dollars)) { 
    text // "$123.40" 
    let charactersAsStrings = text.characters.map({String($0)}) 
    charactersAsStrings // ["$", "1", "2", "3", ".", "4", "0"] 
} 

Огромное спасибо @Sulthan за указание на то, что мой первый ответ, используя String(format: "$%0.2f", dollars) был дрянной :)

+0

@ Султан - вы, конечно, правы! – Grimxn

+0

А потом я просто вытаскиваю отдельные элементы из массива и добавляю их в ярлык? – Mick

+0

Да - я отвечал на ваш вопрос «Я не могу понять, как сломать номер и получить конкретные цифры». Я предполагаю, что для анимации вам может понадобиться одна метка на цифру ... – Grimxn

0

Это на самом деле более сложная анимация, и я не думаю, что можно добиться того, что только с одной меткой. Моей идеей было бы заменить ваш текущий ярлык горизонтальным представлением стека. Если ваш номер, скажем, 100,00 $, затем добавьте 7 меток в стек, каждый из которых просто отображает одну цифру (включая «,» и «$»). Теперь, когда ваше текущее значение изменяется, все, что вам нужно сделать, это выяснить, какая из цифр изменилась. Для этого вы можете сравнить символы перед изменением значения с символами после изменения значения. Символы являются свойством каждой строки. Теперь, когда вы знаете, какие значения изменить, вы можете выполнять итерацию по всем подзонам в вашем стеке, анимируя каждую из цифр отдельно. Я знаю, это гораздо более сложная иерархия представлений, но результаты будут приятными.

Смежные вопросы