2015-04-17 4 views
1

У меня есть UIView в статике UITableViewCell. view настроен на скрытие в viewDidLoad. Когда выбирается button, становится видимым view.Как добавить анимацию, когда вид станет видимым?

- (void)viewDidLoad { 
    [self.myView setHidden:YES]; 
} 

- (IBAction)myButton:(id)sender 
{ 
    if (self.myView.hidden == YES) { 
     [self.myView setHidden:NO]; 
    } else { 
     [self.myView setHidden:YES]; 
    } 

    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    if (indexPath.row == 1) 
    { 
     if (self.myView.hidden == YES) { 
      retuen 252 - self.myView.bounds.size.height; 
     } else return 252; 
    } 
    tableView.estimatedRowHeight = 150; 
    return UITableViewAutomaticDimention; 
} 

Что происходит сейчас, когда выбран button, то view становится видимым и cells высота меняется с анимацию; но view сразу становится видимым, и он мешает другим объектам (пока анимация cells не закончится).

Как я могу сделать view также с анимацией? (Я предпочитаю его анимировать в высоте.)

Редактировать

Я попытался следующим анимировать высоту, так что он должен быть синхронизирован с cell

if (self.myView.hidden == YES) { 
    [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, self.myView.frame.origin.y - self.myView.frame.size.height, self.myView.frame.size.width, self.myView.frame.size.height)]; 

    [self.myView setHidden:NO]; 
    [UIView animateWithDuration:1.0 animations:^(){ 
     [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, 0, self.myView.frame.size.width, self.myView.frame.size.height)]; 
    }]; 
} 

Но всем это делает анимирует местоположение views, (от до носа,) не его высота ??

ответ

0

скрытое свойство на UIView не является анимированным, вам нужно будет отобразить его, а затем установить в состояние, в котором оно должно быть включено, поскольку анимация вот-вот начнется (возможно, установите альфа = 0 или height = 0), то в блоке анимации, установите его в его правильное состояние вы хотите быть в (альфа = 1, высота = cell.frame.size.height)

например

view.hidden = NO; 
view.alpha = 0; 

[UIView animateWithDuration:0.25 animations:^() { 
    view.alpha = 1; 
}]; 
+0

Обновленный вопрос –

+0

касаемо вашего редактирования, вы просто изменения у положения просмотров кадра, а не высоту, последний параметр 'CGRectMake' является высота – Fonix

1

вы можете изменить это так,

if (self.myView.hidden == YES) { 
    [self.myView setAlpha:0.0]; 
    [self.myView setHidden:NO]; 
} 
[UIView animateWithDuration:0.2 animations:^{ 
    if (self.myView.hidden == YES) { 
     [self.myView setAlpha:1.0]; 
    } else { 
     [self.myView setAlpha:0.0]; 
    } 
} 
completion:^(BOOL finished) { 
    if (self.myView.alpha == 0.0) { 
     [self.myView setHidden:YES]; 
    } 
}]; 

Это поможет вам.

Наслаждайтесь кодированием !!

+0

Обновленный вопрос –

+0

Это потому, что вы измените координату 'y' вашего' self.myview'.Вы можете установить 'y' как есть, и просто увеличить высоту по мере необходимости. –

0

// Показать

[UIView animateWithDuration:0.7f 
           delay:0 
          options:UIViewAnimationOptionBeginFromCurrentState 
         animations:^{ 
          viewtemp.alpha = 0.912f; 
         } completion:NULL]; 

// скрыть

[UIView animateWithDuration:0.9f 
          delay:0 
         options:UIViewAnimationOptionBeginFromCurrentState 
        animations:^{ 
         viewtemp.alpha = 0.0f; 
        } completion:NULL]; 
+0

Обновленный вопрос –

1

Внутри MyButton: событие, которое вы можете использовать

- (IBAction)myButton:(id)sender 
{ 

    if (self.myView.hidden == YES) { 
     [self.myView setHidden:NO]; 
    } else { 
     [self.myView setHidden:YES]; 
    } 

    [self.myView setAlpha:0.0f]; 
    [UIView animateWithDuration:1.0 
          delay:0.0 
         options:nil 
        animations:^{ 
         [self.myView setAlpha:1.0f]; 
        } 
        completion:^(BOOL complete){ 
         [self.myView setAlpha:1.0f]; 
        }]; 

    [self.tableView beginUpdates]; 
    [self.tableView endUpdates]; 
} 

Если вы хотите анимировать высоту зрения, вы может сделать как-

CGFloat viewHeight = self.myView.frame.size.height; 
    [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, self.myView.frame.origin.y, self.myView.frame.size.width, 0)]; 
      [UIView animateWithDuration:1.0 
            delay:0.0 
           options:nil 
          animations:^{ 
           [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, self.myView.frame.origin.y, self.myView.frame.size.width, viewHeight)]; 
          } 
          completion:^(BOOL complete){ 
           [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, self.myView.frame.origin.y, self.myView.frame.size.width, viewHeight)]; 
          }]; 
+0

Обновленный вопрос –

+0

@ Арнольд обновленный ответ –

+0

Просто попробовал это, и он не оживляет. (Кстати, я использую 'UIDatePicker') –

0

@arnold, вы пытаетесь изменить его Y Position, вместо height, вам необходимо применить анимацию на своем Height. как показано ниже.

if (self.myView.hidden == YES) { 
[self.myView setFrame:CGRectMake(self.myView.frame.origin.x, 0, self.myView.frame.size.width, 0)]; 

[self.myView setHidden:NO]; 
[UIView animateWithDuration:1.0 animations:^(){ 
    [self.myView setFrame:CGRectMake(self.myView.frame.origin.x, 0, self.myView.frame.size.width, self.myView.frame.size.height)]; 
}]; 
} 
+0

Он не оживляет –

+0

@ Арнольд, можете ли вы проверить, что такое высота 'UIView'? –

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