Обновление UIScrollView / Animation, хронометраж (Objective-C) - PullRequest
3 голосов
/ 12 апреля 2010

У меня есть UIScrollView, который отображает список данных. Прямо сейчас, когда пользователь добавляет еще один элемент в список, я могу расширить размер содержимого UIScrollView и плавно прокрутить вниз, используя setContentOffset и YES для анимации.

Когда пользователь удаляет элемент из списка, я хочу изменить размер содержимого UIScrollView и прокрутить вверх на один шаг также в анимированном виде.

Как правильно оформить заказ? Прямо сейчас, если я изменю размер содержимого перед прокруткой вверх, прокрутка не анимируется.

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

Есть ли способ закончить анимацию прокрутки ДО изменения размера контента?

Спасибо

Ответы [ 3 ]

4 голосов
/ 27 апреля 2010

Да, вам нужно вызвать метод для изменения размера вашего контента после анимация представления прокрутки завершена. Вы можете сделать это в методе scrollViewDidEndScrollingAnimation: делегата представления прокрутки. Установите ваш контроллер в качестве делегата и реализуйте этот метод.

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView {
     [scrollView setContentSize: newSize];
}

Для этого вам не нужен таймер или табличное представление.

1 голос
/ 12 апреля 2010

Я думаю, вы должны использовать UITablView, а не UIScrollView.

в UITableView вы можете реализовать функцию обновления.

с использованием однострочного кода:

[tblView reloadData];
0 голосов
/ 26 апреля 2010

Одна вещь, которую вы можете сделать, это использовать таймер. Как я понимаю, вы хотите сделать это:

  1. Прокрутка к новому окну просмотра
  2. Удалить элемент из списка
  3. Изменить размер содержимого

Вы можете сделать это так:

[scrollView setContentOffset:... animated:YES];
[NSTimer scheduledTimerWithTimeInterval:SECONDS_AS_FLOAT target:self selector:@selector(timerCallback:) userinfo:nil repeats:NO];

- (void)timerCallback:(NSTimer *)timer {
    // remove item from list at this point
    ...
    // set new content size
    [scrollView setContentSize];
}

Вы должны поэкспериментировать, чтобы увидеть, какое правильное время SECONDS_AS_FLOAT использовать, оно должно быть немного больше, чем продолжительность прокрутки. Это будет порядка нескольких сотен миллисекунд, поэтому вы можете поэкспериментировать со значением, скажем, от 0,2 до 0,5.

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