Подтвердить что ты не робот

UIScrollView - с пейджингом включен, могу ли я "изменить" ширину страницы?

Какой самый простой способ иметь представление прокрутки (с установкой pagingEnabled в YES) имеет ширину страницы, установленную на нечто иное, чем границы просмотра прокрутки?

Позвольте мне привести пример. Предположим, у меня есть вид прокрутки с 10 элементами, каждый размером 150 пикселей, а мой вид прокрутки - 300 пикселей в ширину. Если я начну с отображений 1 и 2, видимых и прокрутив по горизонтали вправо, я хочу, чтобы следующая "страница" отображала элементы 2 и 3. Если я прокручу еще одну страницу вправо, я увижу пункты 3 и 4.

Кто-нибудь это сделал? Если нет, какую стратегию вы бы использовали?

4b9b3361

Ответ 2

Майк,

используйте подход из моего блога, к которому привязал вас Бен. Сделайте UIScrollView на половину размера окружающего изображения (т.е. 150 пикселей) и переместите его влево, а не центрируйте его.

Это должно дать вам именно то, что вы хотели.

Cheers, Alex

Ответ 3

Это можно сделать с помощью методов делегирования прокрутки и 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];

          }
}

Ответ 4

Просто переопределите scrollViewWillEndDragging

- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset {
    CGFloat pageWidth = 160;
    targetContentOffset->x = pageWidth * (int)(targetContentOffset->x / pageWidth);
}

Ответ 5

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