2013-09-22 3 views
2

Привет У меня есть кусок кода, который только одна строка не работает ...animateWithDuration setFrame не работает

[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    [label setFrame:CGRectMake(0, 0, frame.size.width, kStandardLabelHeight)]; //working 
    [self.currentLabel setFrame:CGRectOffset(self.currentLabel.frame, frame.size.width, 0)]; //not working 
    [self.currentLabel setAlpha:0.0f]; //working 
} completion:^(BOOL finished) { 
    [self.currentLabel removeFromSuperview]; 
    self.currentLabel = label; 
}]; 

Я бегу из идей, что это неправильно ...

+0

У меня такая же проблема. – chenyi1976

+0

Я предполагаю раскадровки или xib правильно? – Logan

+0

Если это так, перейдите на ваш xib или раскадровку этого вида и снимите флажок «useAutolayout». У меня есть картины где-то, я должен ее найти. – Logan

ответ

0

Рама должна быть a CGRect с 4 параметрами: (xPosition, yPosition, ширина, высота). Используйте CGRectMake для заданного кадра

self.currentLabel.frame = CGRectMake(100, 100, self.currentLabel.frame.size.width, self.currentLabel.frame.size.height) 

Вы установили 0,3 сек Продолжительность анимации, и когда он с конец вы удалите его из вида. Слишком коротко. установите продолжительность, например, 2, и вы увидите, что ваша метка перемещается.

+0

Я сделал и не работал ни –

+0

self.currentLabel.frame = CGRectMake (100, 100, self.currentLabel.frame.size.width, self.currentLabel.frame.size.height) – incmiko

+0

Все еще ничего, я пробовал, что –

0

Иногда вы должны установить кадры для анимации взгляды также после анимации, например, в блоке завершения, попробовать что-то вроде этого

[UIView animateWithDuration:0.3 delay:0.0 options:UIViewAnimationOptionCurveEaseOut animations:^{ 
    [label setFrame:CGRectMake(0, 0, frame.size.width, kStandardLabelHeight)]; //working 
    [self.currentLabel setFrame:CGRectOffset(self.currentLabel.frame, frame.size.width, 0)]; //not working 
    [self.currentLabel setAlpha:0.0f]; //working 
} completion:^(BOOL finished) { 
    self.frame = currentLabelFrame; 
    label.frame = label.frame; 
    [self.currentLabel removeFromSuperview]; 
    self.currentLabel = label; 
}]; 
2

Что Выяснить: если отключить «Use Auto Layout», а затем он магически работает, поэтому эта проблема связана с автоматической компоновкой.

После поиска, я нашел это: http://weblog.invasivecode.com/post/42362079291/auto-layout-and-core-animation-auto-layout-was

Добавить ограничение отображения на выходе для вашей точки зрения, то вместо того, чтобы использовать setFrame, обновление ограничений будет делать трюк!

Ниже мое окончательное внедрение (_topConstraint является вершиной вертикального пространства ограничение вида таблицы):

- (IBAction)switchButtonTouched:(id)sender 
{ 
    if (_topConstraint.constant <= 0) 
     _topConstraint.constant = _buttonView.frame.size.height; 
    else 
     _topConstraint.constant = 0; 

    [_tableView setNeedsUpdateConstraints]; 
    [UIView animateWithDuration:0.5f animations:^(void){ 
     [_tableView layoutIfNeeded]; 
    } completion:^(BOOL finished){ 
    }]; 
} 
-1

Если ваш вопрос не является ни Autolayout связаны, или другие, перечисленные здесь, есть и еще одна возможная проблема, оказалась моей проблемой. Я одновременно выполняю переход UIView (переходFromView: toView :) на представления, которые занимают одно и то же пространство экрана (разные супервизоры, не связанные, кроме позиционирования в супервизии встроенного контроллера представлений).

Мой код выглядит следующим образом:

[UIView transitionFromView:self.someView 
        toView:self.someOtherView 
        duration:0.6f 
        options:UIViewAnimationOptionTransitionCrossDissolve | UIViewAnimationOptionShowHideTransitionViews 
       completion:NULL]; 

[UIView animateWithDuration:0.3 
         delay:0.0 options:UIViewAnimationOptionCurveEaseOut 
        animations:^{ 
         [self.someThirdView setFrame:someFrame]; //not working 
         [self.someThirdView setAlpha:1.0f]; //working 
       } completion:nil]; 

Рамка изменилась, но выскочил на новый кадр, а не анимировать. Я предполагаю, что это внутренняя проблема iOS. Как только я удалил вызов «transitionFromView: ...», анимация кадра работала нормально.

Моим решением на данный момент было перемещение второй анимации в блок завершения переходаFromView. Это не идеально, поскольку две анимации должны были выстроиться в линию, но на данный момент это приемлемое решение.

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