2010-05-17 4 views
2

У меня есть UIImage (ширина изображения> 320 пикселей) в UIScrollView (покрывает всю ширину экрана) и требуется пейджинговый эффект.UIScrollView пользовательское расстояние подкачки

Все учебники/примеры, которые я нашел, объясняют, как это сделать с несколькими UIImages или UIVIews, но у меня только 1 UIImage в UIScrollView. Моя цель - создать эффект «рулетки». и scrollview должен «показывать» на каждом маркере ленты?

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

ответ

1

Я не могу придумать более чистое решение, чем выполнять математику на лету. Если желаемая длина страницы составляет 100 пикселей, чем «слайд» UIImage, чтобы она оставалась относительно фактической страницы. Так что-то вроде:

CGFloat pageWidth = 100; 
int numPages = ceilf(myImageView.bounds.size.width/pageWidth); 
scrollView.contentSize = CGSizeMake(numPages * scrollView.bounds.size.width, 
            scrollView.bounds.size.height); 

Тогда подкласс layoutSubviews метод мнение о скроллинга:

- (void)layoutSubviews { 
    int numPages = ceilf(myImageView.bounds.size.width/pageWidth); 
    CGRect visibleBounds = [self bounds]; 
    CGFloat start = visibleBounds.origin.x; 
    CGFloat offset = start/pageWidth; 
    myImageView.frame = CGRectMake(offset, myImageView.frame.origin.y, 
            myImageView.frame.size.width, 
            myImageView.frame.size.height); 
} 

Я не проверял это на всех, но, надеюсь, он получает вас на рабочем треке. То, что это должно делать, перемещает изображение, когда вы прокручиваете так, чтобы оно выглядело так, что каждая «страница» перемещает только изображение 100px.

+0

спасибо MrHen! ... просто следующий вопрос ... в вашем методе layoutSubvies, в чем цель numPages? ура! – alex25

+0

Ммм ... Я не помню. Я, наверное, забыл вытащить эту линию, поскольку, очевидно, она больше ничего не делает. :) – MrHen

Смежные вопросы