#ios #objective-c #gestures
#iOS #objective-c #жесты
Вопрос:
Я хочу добавить жест обновления в некоторые представления в моем приложении iOS
Обычно этот жест прокручивается сверху и удерживается некоторое время
Я мог бы создать просто обработчик жестов, который работает, если пользователь удерживал прокручиваемый просмотр более 1 секунды:
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
if (scrollView == _tableView) {
_scrollViewDragStarted = [NSDate date];
}
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
if (scrollView == _tableView) {
if (velocity.y < 0 amp;amp; targetContentOffset->y < 0) {
NSTimeInterval hold = [[NSDate date] timeIntervalSinceDate:_scrollViewDragStarted];
if (hold > 1) {
// refreshing method calls here
}
}
_scrollViewDragStarted = nil;
}
}
Это работает отлично, но подсказка о удержании необходима, когда пользователь прокручивает вид сверху
Как я могу обнаружить такую прокрутку? scrollViewWillBeginDragging:
событие не имеет параметров прокрутки, поскольку scrollViewWillEndDragging:withVelocity:targetContentOffset:
Или, может быть, существует другой способ реализовать это?
Ответ №1:
Попробуйте использовать scrollViewDidScroll(_:)
. https://developer.apple.com/reference/uikit/uiscrollviewdelegate/1619392-scrollviewdidscroll
Обратите внимание, что вы можете использовать UIScrollView.contentOffset.y < 0
, чтобы проверить, прокручивалось ли оно выше вершины.
Комментарии:
1. в частности, определить, что
contentOffset.y < 0
Ответ №2:
1) Вы можете использовать refreshcontrol и настроить его так, как вы хотите. Я бы рекомендовал использовать это в качестве основного API и также предоставляет вам забавные анимации. кроме того, это универсально и используется везде, поэтому пользователь уже будет знать, как использовать сравнение с вашим жестом прокрутки и секундного удержания.
-(недействительный)viewDidLoad {
…
UIRefreshControl *refreshControl = [[UIRefreshControl alloc] init];
[refreshControl addTarget:self action:@selector (handleRefresh:) forControlEvents:UIControlEventValueChanged];
[self.MyTableView добавляет SUBVIEW:refreshControl];
…
}-(void)handleRefresh: (id) отправитель { // выполните обновление здесь … }
Ответ №3:
вы можете использовать KVO для contentffset
параметра
вот один из моих репозиториев Github
свяжитесь со мной, если хотите xiaoyulevin@gmail.com