анимировать увеличение UILabel

Я пытаюсь анимировать значения UILabel при появлении представления. Поэтому я создал эту функцию.

private func animateIncrementUILabel(label: SpringLabel, labelValue: Int, animationPeriod: Float?)
{

    animationPeriod != nil ? animationPeriod! : 40

    dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), {

        for (var i = 0; i < labelValue; i++)
        {
            usleep(UInt32(animationPeriod!)/100 * 1000000)
            dispatch_async(dispatch_get_main_queue(), {
                label.text = String(i)
            })
        }

    })
}

но при вызове этого в моем методе viewDidAppear, например

animateIncrementUILabel(counterLabelOne, labelValue: 20, animationPeriod: 40.0)

он показывает значение сразу в метке без «анимированного приращения».

Что я здесь делаю неправильно?


person Reshad    schedule 05.10.2015    source источник
comment
Удалите эти блоки отправки и используйте активность NSTimer.Schdule вместо сна.   -  person Alvin Varghese    schedule 05.10.2015


Ответы (1)


Не используйте usleep и dispatch_async в этом случае. Я бы рекомендовал вам использовать dispatch_after:

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(i * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
    <#code to be executed after a specified delay#>
});

или NSTimer с возможностью повтора

NSTimer.scheduledTimerWithTimeInterval(0.4, target: self, selector: "update", userInfo: nil, repeats: true)

Также вы можете передать некоторые параметры таймеру:

func someFunc(){
    var arr = ["one", "two"] 
    var timer: NSTimer = NSTimer.scheduledTimerWithTimeInterval(0.1, target: self, selector: Selector("val:"), userInfo: arr, repeats: true)
}

func val(timer: NSTimer){

    //You'll get an array in timer.userInfo
    // arr = timer.userInfo.
    // Now you'll get you data in each index of arr

}
person Arsen    schedule 05.10.2015
comment
Но я хочу указать несколько параметров. Как мне добиться этого с помощью NSTimer? не могли бы вы привести пример? - person Reshad; 05.10.2015
comment
но таким образом я не могу заставить дать определенные параметры. Это все необязательно - person Reshad; 05.10.2015