RomanHouse
RomanHouse

Reputation: 2552

UIScrollView. Page Controller with many UIView inside

I have 2 views are connected with NavigationController. Second view is scrollView with page controll. My main view has 1 UIButton. When pressing on it are obtained 3-4 seconds delay. There are 21 views in scrollView. And I have spurts when scrolling between view in scrollView. How can I reduce delay and remove spurts?

My viewDidLoad method:

-(void)viewDidLoad {
self.pageControl = [[UIPageControl alloc] initWithFrame:CGRectMake(0.0f, 280.0f, 320.0f, 20.0f)];
[self.view addSubview:self.pageControl];

self.scrollView = [[UIScrollView alloc] initWithFrame:CGRectMake(0.0f, 30.0f, 480.0f, 250.0f)];
[self.view addSubview:self.scrollView];

pageControlBeingUsed = NO;

NSInteger firstNumber = 1;
for (NSUInteger i = 0; i < 20; i++) {
    BIDExercisePrototype *view = [[BIDExercisePrototype alloc] initWithNumber:firstNumber];
    [self.viewsArray addObject:view];
    firstNumber += 50;
}


for (NSUInteger i = 0; i < 20; i++) {
    UIViewController *someController = [[UIViewController alloc] init];
    someController = [self.viewsArray objectAtIndex:i];
    someController.view.frame = CGRectMake(480.0f*i, 0.0f, 480.0f, 280.0f);
    [self.scrollView addSubview:someController.view];
}
self.scrollView.contentSize = CGSizeMake(self.scrollView.frame.size.width * self.viewsArray.count, self.scrollView.frame.size.height);
self.pageControl.backgroundColor = [UIColor clearColor];
self.pageControl.currentPage = 0;
self.pageControl.numberOfPages = self.viewsArray.count;
self.scrollView.showsVerticalScrollIndicator = NO;
self.scrollView.showsHorizontalScrollIndicator = NO;
self.scrollView.pagingEnabled = YES;
self.scrollView.delegate = self;
[self.pageControl addTarget:self action:@selector(changePage) forControlEvents:UIControlEventValueChanged];
}

- (void)scrollViewDidScroll:(UIScrollView *)sender {
if (!pageControlBeingUsed) {
    CGFloat pageWidth = self.scrollView.frame.size.width;
    int page = floor((self.scrollView.contentOffset.x - pageWidth / 2) / pageWidth) + 1;
    self.pageControl.currentPage = page;
}
    }

    - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {
pageControlBeingUsed = NO;
    }

    - (void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView {
pageControlBeingUsed = NO;
    }

    - (void)changePage {
CGRect frame;
frame.origin.x = self.scrollView.frame.size.width * self.pageControl.currentPage;
frame.origin.y = 0;
frame.size = self.scrollView.frame.size;
[self.scrollView scrollRectToVisible:frame animated:YES];

pageControlBeingUsed = YES;
    }

Upvotes: 0

Views: 1048

Answers (2)

Paul de Lange
Paul de Lange

Reputation: 10633

May I suggest you forget about recoding the wheel (so to speak) and use existing projects that have already solved the problems

Upvotes: 1

Chris Wagner
Chris Wagner

Reputation: 21013

I think you should be able to follow the same practice for improving UITableView's scroll performance.

Do your drawing manually and have only one view in each cell.

Check out the following SO post which discusses multiple ways to improve scrolling performance by rendering your cells in specific ways.

Tricks for improving iPhone UITableView scrolling performance?

Upvotes: 1

Related Questions