简体   繁体   中英

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;
    }

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?

我建议你忘记重新编码轮子(可以这么说)并使用已经解决问题的现有项目

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM