Я относительно новичок в программировании на iPad, и я пытался собрать простую программу. По сути, это книга для детей, и мне нужна функциональность средства просмотра стилей комиксов (или фотографий), где люди проводят пальцем, чтобы изменить «страницы» (или изображения).
Каждое изображение 1024x768. В настоящее время они хранятся в формате JPG из-за очень больших размеров файлов, которые, как представляется, создают PNG. Для этой истории есть 28 страниц.
Я взглянул на пример PageControl, реализующий UIScrollView. При инициализации я создаю достаточно большую область прокрутки. Затем, когда пользователь прокручивает, я загружаю предыдущее и следующее изображения. Опять же, как в примере, только без реализации элемента управления страницы внизу.
Проблема, с которой я сталкиваюсь, - это небольшая пауза в анимации, когда я переворачиваюсь. Как только изображения загружены или кэшированы, этого не происходит. Теперь я знаю, что приложение для работы с фотографиями этого не делает, и я не уверен, что его вызывает.
Вот мой код для метода scrollViewDidScroll. Я не отставал от номера страницы, и он будет вызывать loadPageIntoScrollView только когда страница изменилась - я думал, что безумное количество вызовов, которое он делал, вызывало небольшую паузу в анимации, но оказалось, что это не так.
- (void) scrollViewDidScroll: (UIScrollView *) sender
{
CGFloat pageWidth = scrollView.frame.size.width;
int localPage = floor( (scrollView.contentOffset.x - pageWidth / 2 ) / pageWidth ) + 1;
if( localPage != currentPage )
{
currentPage = localPage;
[self loadPageIntoScrollView:localPage - 1];
[self loadPageIntoScrollView:localPage];
[self loadPageIntoScrollView:localPage + 1];
}
} // scrollViewDidScroll
А вот и мой loadPageIntoScrollView
метод. Я только создаю UIImageView и загружаю изображение в это - я не понимаю, как это могло бы быть намного "худее". Но почему-то это вызывает паузу. Опять же, это не ОГРОМНАЯ пауза, просто одна из тех вещей, которые вы заметили, и этого достаточно, чтобы прокрутка выглядела очень. очень слабый сбой.
Заранее благодарю за любую помощь, которую вы можете оказать.
- (void) loadPageIntoScrollView: (int)page
{
if( page < 0 || page >= kNumberOfPages )
return;
UIImageView *controller = [pages objectAtIndex:page];
NSLog( @"checking pages" );
if( (NSNull *)controller == [NSNull null] )
{
UITapGestureRecognizer *singleTap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(handleSingleTap:)];
NSString *pageName = [[NSString alloc] initWithFormat:@"%d.jpg", page];
controller = [[UIImageView alloc]initWithImage:[UIImage imageNamed:pageName]];
[controller setUserInteractionEnabled:YES];
[controller addGestureRecognizer:singleTap];
[pages replaceObjectAtIndex:page withObject:controller];
[controller release];
} // if controller == null
// add the page to the scrollview
if( controller.superview == nil )
{
NSLog(@"superview was nil, adding page %d", page );
CGRect frame = scrollView.frame;
frame.origin.x = frame.size.width * page;
frame.origin.y = 0;
controller.frame = frame;
[scrollView addSubview:controller];
} // if
} // loadPageIntoScrollView