Установка свойства дважды при анимации - PullRequest
1 голос
/ 13 июля 2011

Что произойдет, если я дважды установлю свойство для двух разных значений внутри блока анимации?Если я выполню следующий псевдокод:

myView.frame = CGRectMake(0,  0, 50, 50); // state 0
[UIView beginAnimations:@"showBanner" context:NULL];
{
    [UIView setAnimationDuration:2];
    myView.frame = CGRectMake(0, 20, 50, 50); // state 1
    myView.frame = CGRectMake(0, 10, 50, 50); // state 2
}
[UIView commitAnimations];

, какой из следующих результатов я должен получить?

  1. Кадр анимируется из состояния 0 через состояние 1 в состояние 2.
  2. Кадр анимируется из состояния 0 непосредственно в состояние 2, игнорируя состояние 1.

Я ожидаю, что результат # 2 произойдет, потому что я думаю, что состояние свойств записывается при анимациистремится.В моем приложении наблюдается поведение, которое, кажется, указывает на то, что результат # 1 происходит, отсюда и мой вопрос.

Ответы [ 3 ]

1 голос
/ 14 июля 2011

На самом деле ответ 3. Ничего из вышеперечисленного.

Блок анимации будет анимировать только последнее изменение состояния для свойства. Таким образом, в вашем случае кадр будет анимирован из состояния 1 в состояние 2.

1 голос
/ 13 июля 2011

(2) Кадр анимируется из состояния 0 непосредственно в состояние 2, игнорируя состояние 1.

0 голосов
/ 12 июня 2013

Мне нужен был ответ на этот вопрос, и я не нашел ни одного, приведенного здесь, удовлетворительным.Я построил быстрый тест, который поместил небольшое подпредставление вроде этого:

- (void)viewDidLoad {

    [super viewDidLoad];

    self.testView = [[UIView alloc] initWithFrame:CGRectMake(0,0,40,40)];
    self.testView.backgroundColor = [UIColor redColor];
    [self.view addSubview:self.testView];
}

, а затем предоставил две альтернативные анимации, подобные этой:

- (void)animateWithSimpleBlock {

    [UIView animateWithDuration:2 animations:^{
        self.testView.frame = CGRectMake(200,200,40,40);
        self.testView.frame = CGRectMake(  0,300,40,40); 
    }];
}

- (void)animateWithQualifiedBlock {

    [UIView animateWithDuration:2 delay:0.0 options:UIViewAnimationOptionBeginFromCurrentState animations:^{
        self.testView.frame = CGRectMake(200,200,40,40);
        self.testView.frame = CGRectMake(  0,300,40,40); 
    }];
}

Вот что происходит: на animateWithSimpleBlock,testView перемещается в одном кадре (без анимации) из начальной позиции 0,0 в промежуточную позицию 200 200.Оттуда он анимируется в течение 2 секунд до конечной позиции 0,300.

Но animateWithQualifiedBlock плавно анимирует testView от его начальной позиции 0,0 до конечной позиции 0,300.Это то поведение, которое мне нужно (т.к. я создаю новые позиции вида с помощью циклических методов, вызываемых в блоке анимации).

...