Ответ 1
Александр Рети просто написал блог по этой теме: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html. Короткий ответ: это не так просто, как просто изменение ширины "страницы", но это не слишком сложно.
Какой самый простой способ иметь представление прокрутки (с установкой pagingEnabled в YES) имеет ширину страницы, установленную на нечто иное, чем границы просмотра прокрутки?
Позвольте мне привести пример. Предположим, у меня есть вид прокрутки с 10 элементами, каждый размером 150 пикселей, а мой вид прокрутки - 300 пикселей в ширину. Если я начну с отображений 1 и 2, видимых и прокрутив по горизонтали вправо, я хочу, чтобы следующая "страница" отображала элементы 2 и 3. Если я прокручу еще одну страницу вправо, я увижу пункты 3 и 4.
Кто-нибудь это сделал? Если нет, какую стратегию вы бы использовали?
Александр Рети просто написал блог по этой теме: http://blog.proculo.de/archives/180-Paging-enabled-UIScrollView-With-Previews.html. Короткий ответ: это не так просто, как просто изменение ширины "страницы", но это не слишком сложно.
Майк,
используйте подход из моего блога, к которому привязал вас Бен. Сделайте UIScrollView на половину размера окружающего изображения (т.е. 150 пикселей) и переместите его влево, а не центрируйте его.
Это должно дать вам именно то, что вы хотели.
Cheers, Alex
Это можно сделать с помощью методов делегирования прокрутки и content-offset.
Ниже приведен подробный код для этого.
int start;
int end;
int k=0;
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView1
{
pageControlUsed = NO;
start = scrollView.contentOffset.x;
}
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView1 willDecelerate:(BOOL)decelerate
{
end = scrollView.contentOffset.x;
}
- (void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView1{
int diff = end-start;
if (diff>0)
{
k=k+150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
else {
k=k-150;
[scrollView setContentOffset:CGPointMake(k, 0) animated:YES];
}
}
Просто переопределите scrollViewWillEndDragging
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
CGFloat pageWidth = 160;
targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}
UIScrollView *album = [[UIScrollView alloc] init];
album.translatesAutoresizingMaskIntoConstraints = NO;
album.pagingEnabled = YES;
album.clipsToBounds = NO;
album.showsHorizontalScrollIndicator = NO;
album.contentInset = UIEdgeInsetsMake(0, -50, 0, -50);
[view addSubview:album];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-50-[_album(220)]" options:0 metrics:metrics views:views]];
[view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|[_album(300)]" options:0 metrics:metrics views:views]];
это отлично работает на iOS 7.1 ~ 8.2