UILabel изменение номера анимации - PullRequest
8 голосов
/ 17 октября 2011

У меня есть UILabel, которая отображает оценку пользователей.И время от времени изменяется оценка, есть ли способ оживить это изменение, медленно увеличивая это число от его текущего значения до его значения результата?Что-то вроде http://josheinstein.com/blog/index.php/2010/02/silverlight-animated-turbotax-number-display/, но для цели-c.

Ответы [ 2 ]

18 голосов
/ 18 октября 2011

Используйте CADisplayLink для изменения свойства текста пользовательского подкласса UILabel в течение некоторого периода времени.Возможно, вы захотите использовать NSNumberFormatter для более красивого вывода.

// Create instance variables/properties for: `from`, `to`, and `startTime` (also include the QuartzCore framework in your project)

- (void)animateFrom:(NSNumber *)aFrom toNumber:(NSNumber *)aTo {
    self.from = aFrom; // or from = [aFrom retain] if your not using @properties
    self.to = aTo;     // ditto

    self.text = [from stringValue];

    CADisplayLink *link = [CADisplayLink displayLinkWithTarget:self selector:@selector(animateNumber:)];

    startTime = CACurrentMediaTime();
    [link addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
}

- (void)animateNumber:(CADisplayLink *)link {
    static float DURATION = 1.0;
    float dt = ([link timestamp] - startTime) / DURATION;
    if (dt >= 1.0) {
        self.text = [to stringValue];
        [link removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSRunLoopCommonModes];
        return;
    }

    float current = ([to floatValue] - [from floatValue]) * dt + [from floatValue];
    self.text = [NSString stringWithFormat:@"%i", (long)current];
}
4 голосов
/ 18 октября 2011

AUIAnimatedText имеет все, что вы просили.Это замена UILabel с широкими возможностями анимации текста,

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...