UISearchBar - анимированная область видимости - PullRequest
1 голос
/ 25 сентября 2011

Я нашел пример анимированной панели поиска с областью видимости в разделе «Справочник по протоколу UISearchDisplayDelegate» ( SearchBar-animated-sample ), вот предварительный просмотр видео: SearchBarAnimated-видео

Я проверил пример кода, но не могу найти код, запускающий анимацию. Кто-нибудь знает, как создать эту анимацию? Вам нужно использовать UISearchBarDelegate, чтобы получить эту анимацию?

Ответы [ 5 ]

1 голос
/ 08 апреля 2014

Для управления анимацией UISearchBar вы реализовали делегаты UISearchDisplayController, расширив его в своем заголовочном файле. Делегаты следующие:

    - (void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller
    {
        [UIView beginAnimations:nil context:NULL];
        self.searchDisplayController.searchBar.showsScopeBar = NO;
        CGRect headerViewFrame = self.searchDisplayController.searchBar.frame;
        headerViewFrame.origin.y -= 54.0f;
        self.searchDisplayController.searchBar.frame = headerViewFrame;

        CGRect tableViewFrame = self.tableView.frame;
        tableViewFrame.origin.y -= 54.0f;
        self.tableView.frame = tableViewFrame;

        [UIView commitAnimations];
    }

    -(void)searchDisplayControllerWillEndSearch:(UISearchDisplayController *)controller
    {
        [UIView beginAnimations:nil context:NULL];

        CGRect headerViewFrame = self.searchDisplayController.searchBar.frame;
        headerViewFrame.origin.y += 54.0f;
        self.searchDisplayController.searchBar.frame = headerViewFrame;

        CGRect tableViewFrame = self.tableView.frame;
        tableViewFrame.origin.y += 54.0f;
        self.tableView.frame = tableViewFrame;

        [UIView commitAnimations];
    }
0 голосов
/ 06 июня 2015

sizeToFit в блоке анимации

Панель UISearchBar с областью видимости легко анимируется.UISearchBar имеет высоту 44.f перед вызовом sizeToFit с панелью области, а затем становится 88.f.В моем случае UISearchBar был встроен в UITableView в Интерфейсном Разработчике, поэтому было невозможно добавить автоматические ограничения макета.

#pragma mark - UISearchBarDelegate methods

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsScopeBar = YES;
    [UIView animateWithDuration:0.2f animations:^{
        [searchBar sizeToFit];
    }];

    [searchBar setShowsCancelButton:YES animated:YES];

    return YES;
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    searchBar.showsScopeBar = NO;
    [searchBar sizeToFit];

    [searchBar setShowsCancelButton:NO animated:YES];

    return YES;
}
0 голосов
/ 15 октября 2014

Это хорошо работает для меня в Xcode 6. Если у вас есть ограничения авторазметки, вам, возможно, придется добавить корректировки для них, как я сделал (не работал без них).

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    searchBar.showsScopeBar = YES;
    searchBarHeightConstraint.constant = 88; // Changes from 44 to 88 with scope bar
    tableViewHeightConstraint.constant = 480; // Changes from 524 to 480 with scope bar

    [UIView animateWithDuration:0.3
                     animations:^{
                         CGRect newFrame = tableView.frame;
                         newFrame.origin.y = 88;
                         tableView.frame = newFrame;
                     }];

    return YES;
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar
{
    searchBar.showsScopeBar = NO;
    searchBarHeightConstraint.constant = 44;
    tableViewHeightConstraint.constant = 524;

    [UIView animateWithDuration:0.3
                     animations:^{
                         CGRect newFrame = tableView.frame;
                         newFrame.origin.y = 44;
                         tableView.frame = newFrame;
                     }];
    return YES;
}
0 голосов
/ 11 мая 2012

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

Как скрыть / показать область видимости UISearchBar с анимацией?

0 голосов
/ 25 сентября 2011

Он встроен прямо в UISearchBar. Apple делает это за вас, вам не нужно вызывать какой-либо метод самостоятельно.

По сути, с того момента, как вы установили свойство scopeButtonTitles панели поиска, Apple будет анимировать панель области действия.

...