このコードはユニバーサル用です。
iPhone と iPad のレイアウトはほぼ同じです。また、オブジェクト タイプに関する限り、それらは同一です。
iPad だけでページ コントロールが更新されない理由を理解しようとしています。NSLog をいじってみると、iPhone ではscrollViewDidScroll
メソッドが正しく機能しているようです。iPadにはありません。スクロールビューをタッチしてもログがありません。
また、現在のページを教えてくれる NSLog も入れました。iPadでそれを行いますが、scrollViewがスクロールするときではなくloadVisiblePages
、メソッドを呼び出したときのみです。viewDidLoad
最初と最後のページをハード コードしたセクションは無視してください。これは通常プログラムで行うためですが、この小さなバグのために、すべてのページをメモリにロードする必要がありました。
- (void)loadVisiblePages {
// First, determine which page is currently visible
CGFloat pageWidth = self.scrollView.frame.size.width;
NSInteger page = (NSInteger)floor((self.scrollView.contentOffset.x * 2.0f + pageWidth) / (pageWidth * 2.0f));
// Update the page control
self.pageControl.currentPage = page;
NSLog(@"Page number is %i", page);
// Work out which pages you want to load
NSInteger firstPage = 0; // page - 1;
NSInteger lastPage = 3; //page + 1;
// Purge anything before the first page
for (NSInteger i=0; i<firstPage; i++) {
[self purgePage:i];
}
// Load pages in our range
for (NSInteger i=firstPage; i<=lastPage; i++) {
[self loadPage:i];
}
// Purge anything after the last page
for (NSInteger i=lastPage+1; i<self.pageImages.count; i++) {
[self purgePage:i];
}
}
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// Load the pages that are now on screen
[self loadVisiblePages];
NSLog(@"Scroll View Did Scroll");
}