UILabel анимация применительно к другому объекту UIView - PullRequest
1 голос
/ 09 января 2012

Таким образом, у меня есть объект UIView (называемый шкалой) с правой стороны, который является вертикальной чертой. У меня есть другая метка слева от этой панели, которую я хочу отображать разным текстом на разных уровнях вертикальной панели (navLabel). Я хочу, чтобы этот ярлык выглядел так, как будто он закреплен на некотором расстоянии (например, 10 пикселей) от моей вертикальной полосы. Мой ярлык оставлен выровненным. Я делаю это разными способами, где мне нужно обновить метку:

        CGSize labelSize = [navLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:17.0]];
        CGRect newFrame = CGRectMake(gauge.frame.origin.x - 10 - labelSize.width, FIRST_HEIGHT, navLabel.frame.size.width, navLabel.frame.size.height);
        [UIView animateWithDuration:0.5 animations:^{
            self.navLabel.frame = newFrame;
        }];

В разных методах я просто изменяюсь на соответствующую высоту (т.е. #define FIRST_HEIGHT).

Мой ярлык заканчивается в тех местах, где я хочу, но анимация выглядит забавно. Например, если мой первый ярлык был @"label 1", а мой второй ярлык был @"my much much much longer label", то получается, что ярлык перемещается на правильную высоту, но поскольку ярлыки имеют разные размеры, вы также видите x-анимацию, которая делает это выглядит смешно. Я хочу только анимацию в направлении у. Как я могу это сделать?

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

1 Ответ

0 голосов
/ 09 января 2012

Не ясно, что это поведение, которое вы хотите, но почему бы просто не установить navLabel.frame для правильной (новой) x-координаты в качестве источника до анимации, а затем анимировать к новому кадру что имеет правильное начало с новым смещением высоты?

Или настройте две анимации, используя эти два кадра: одну, которая сначала анимирует направление у, а вторую, которая анимирует направление х к новой координате х начала кадра. Или наоборот.

// This version simply sets the correct origin (and the correct new width), then animates the y-direction
CGSize labelSize = [navLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:17.0]];
self.navLabel.frame = CGRectMake(gauge.frame.origin.x-10-labelSize.width, self.navLabel.frame.origin.y,labelSize.width,navLabel.frame.size.height);
// now navLabel's frame has the correct new width (and origin x-coord)
CGRect newFrame = CGRectMake(self.navLabel.origin.x, FIRST_HEIGHT, navLabel.frame.size.width, navLabel.frame.size.height);
// now this animation will cause movement only in the y-direction 
[UIView animateWithDuration:0.5 animations:^{
        self.navLabel.frame = newFrame;
    }];

// This version animates the change in the frame in the x-direction first, then does what it did before
CGSize labelSize = [navLabel.text sizeWithFont:[UIFont fontWithName:@"Arial" size:17.0]];
CGRect newFrame = CGRectMake(gauge.frame.origin.x-10-labelSize.width, self.navLabel.frame.origin.y,labelSize.width,navLabel.frame.size.height);
// this animation will cause movement in the x-direction 
[UIView animateWithDuration:0.5 animations:^{
        self.navLabel.frame = newFrame;
    }];
// now navLabel's frame has the correct new width (and origin x-coord), so set the new y-coord
CGRect newFrame = CGRectMake(self.navLabel.origin.x, FIRST_HEIGHT, navLabel.frame.size.width, navLabel.frame.size.height);
// now this animation will cause movement only in the y-direction 
[UIView animateWithDuration:0.5 animations:^{
        self.navLabel.frame = newFrame;
    }];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...