Ответ 1
UIScrollView
paging работает, прокручивая страницы с той же шириной scrollView (на ваших страницах размером 480). Это означает, что у вас есть одна единственная страница (вы все равно сможете прокручивать влево и вправо из-за 160 встроенных вложений).
Один из способов сделать эту работу:
self.scrollView.frame = CGRectMake(80, 180, 160, 190);
self.scrollView.clipsToBounds = NO;
self.scrollView.contentInset = UIEdgeInsetsZero;
self.scrollView.pagingEnabled = YES;
[self.scrollView setContentSize:CGSizeMake(480, 190)];
Это будет правильно рисоваться и прокручиваться, однако стороны экрана не будут интерактивными (80 пикселей с каждой стороны, так как управление начинается с frame.origin.x = 80 и заканчивается на 80 + 160 = 240).
Второй вариант - обработать пейджинг самостоятельно, используя методы, предоставляемые UIScrollViewDelegate
.
- (void)viewDidLoad
{
[super viewDidLoad];
// pageIndex must be declared as a class member - this is used to prevent skipping pages during scroll
pageIndex = 0;
self.scrollView.frame = CGRectMake(0, 180, 320, 190);
self.scrollView.contentInset = UIEdgeInsetsMake(0, 80, 0, 80);
self.scrollView.pagingEnabled = NO;
self.scrollView.clipsToBounds = YES;
[self.scrollView setContentSize:CGSizeMake(480, 190)];
self.scrollView.delegate = self;
}
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset{
int pageWidth = 160;
int pageX = pageIndex*pageWidth-scrollView.contentInset.left;
if (targetContentOffset->x<pageX) {
if (pageIndex>0) {
pageIndex--;
}
}
else if(targetContentOffset->x>pageX){
if (pageIndex<3) {
pageIndex++;
}
}
targetContentOffset->x = pageIndex*pageWidth-scrollView.contentInset.left;
NSLog(@"%d %d", pageIndex, (int)targetContentOffset->x);
}