2012-06-18 31 views
0

我有2个视图与NavigationController连接。第二个视图是带有页面控制的scrollView。我的主视图有1个UIButton。按下它时会获得3-4秒的延迟。在scrollView中有21个视图。当在scrollView中的视图之间滚动时,我已经喷发了。我如何减少延迟并消除喷溅?UIScrollView。页面控制器与很多UIView里面

viewDidLoad方法:

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

回答

1

我想你应该能够遵循改进的UITableView的滚动性能相同的做法。

手动进行绘制,并在每个单元中只有一个视图。

看看下面的SO帖子,它讨论了通过以特定方式渲染你的单元格来提高滚动性能的多种方法。

Tricks for improving iPhone UITableView scrolling performance?

+0

但我不习惯的UITableView。只有scrollview与UIView里面 – RomanHouse

+0

我意识到你不是,但意见是视图,UITableView继承自UIScrollView。 UITableViewCell是一个UIView。该文章中描述的方法通过减少呈现所需的子视图数量并将它们全部合并为一个来提高性能,以便在滚动时UIScrollView无需呈现所有单独的子视图。我认为这个概念对于放置了UIViews的UIScrollView会非常好。 –

1

我可以建议你忘了重新编码轮(这么说),并使用existing projects那些已经解决的问题