Я создаю приложение для просмотра комиксов, которое состоит из двух контроллеров представления, корневой viewcontroller в основном отображает представление, где пользователь сам решает, какой комикс он хочет прочитать, нажимая кнопку. Второй viewController фактически отображает комикс в виде uiscrollview с панелью инструментов и заголовком вверху.
Итак, проблема, с которой я сталкиваюсь, заключается в том, что сами панели комиксов с изображениями не меняются по сравнению с первым комиксом, на который вы переходите, если вы выбираете другой комикс после просмотра первого. То, как я его настроил, и я признаю, что это не совсем mvc, поэтому, пожалуйста, не ненавидите, в любом случае, способ, которым я его настраиваю, состоит в том, что каждый комикс uiscrollview состоит из x количества изображений jpg, где имена изображений каждого комикса имеют общий префикс и затем такие числа, как «funny1.jpg», «funny2.jpg», «funny3.jpg» и «soda1.jpg», «soda2.jpg», «soda3.jpg» и т. д. *
, поэтому, когда пользователь выбирает комикс для просмотра в корневом контроллере, он делает вызов делегату и устанавливает ivars для экземпляров comicviewcontroller, который принадлежит делегату (mainDelegate.comicViewController.property). Я устанавливаю количество панелей в этот комикс, название комикса для заголовка и префикс изображения.
Количество изображений изменяется (или, по крайней мере, число, которое вы можете прокрутить), и название меняется, но по какой-то причине изображения такие же, как и в любом комиксе, на который вы нажали изначально.
Я основываю все это приложение на примере прокрутки кода от Apple.
Я подумал, что если я добавлю анимированный вызов viewWillAppear: (BOOL) к comicViewController каждый раз, когда пользователь нажимает кнопку, которая исправит это, но этого не произошло, в конце концов, именно здесь выложен вид прокрутки.
В любом случае, вот код от каждого из двух контроллеров:
RootController:
-(IBAction) launchComic2{
AppDelegate *mainDelegate = [(AppDelegate *) [UIApplication sharedApplication] delegate];
mainDelegate.myViewController.comicPageCount = 3;
mainDelegate.myViewController.comicTitle.text = @"\"Death by ETOH\"";
mainDelegate.myViewController.comicImagePrefix = @"etoh";
[mainDelegate.myViewController viewWillAppear:YES];
[mainDelegate.window addSubview: mainDelegate.myViewController.view];
comicViewController:
-(void) viewWillAppear:(BOOL)animated {
self.view.backgroundColor = [UIColor viewFlipsideBackgroundColor];
// 1. setup the scrollview for multiple images and add it to the view controller
//
// note: the following can be done in Interface Builder, but we show this in code for clarity
[scrollView1 setBackgroundColor:[UIColor whiteColor]];
[scrollView1 setCanCancelContentTouches:NO];
scrollView1.indicatorStyle = UIScrollViewIndicatorStyleWhite;
scrollView1.clipsToBounds = YES; // default is NO, we want to restrict drawing within our scrollview
scrollView1.scrollEnabled = YES;
// pagingEnabled property default is NO, if set the scroller will stop or snap at each photo
// if you want free-flowing scroll, don't set this property.
scrollView1.pagingEnabled = YES;
// load all the images from our bundle and add them to the scroll view
NSUInteger i;
for (i = 1; i <= self.comicPageCount; i++)
{
NSString *imageName = [NSString stringWithFormat:@"%@%d.jpg", self.comicImagePrefix, i];
NSLog(@"%@%d.jpg", self.comicImagePrefix, i);
UIImage *image = [UIImage imageNamed:imageName];
UIImageView *imageView = [[UIImageView alloc] initWithImage:image];
// setup each frame to a default height and width, it will be properly placed when we call "updateScrollList"
CGRect rect = imageView.frame;
rect.size.height = kScrollObjHeight;
rect.size.width = kScrollObjWidth;
imageView.frame = rect;
imageView.tag = i; // tag our images for later use when we place them in serial fashion
[scrollView1 addSubview:imageView];
[imageView release];
}
[self layoutScrollImages]; // now place the photos in serial layout within the scrollview
}
- (void)layoutScrollImages
{
UIImageView *view = nil;
NSArray *subviews = [scrollView1 subviews];
// reposition all image subviews in a horizontal serial fashion
CGFloat curXLoc = 0;
for (view in subviews)
{
if ([view isKindOfClass:[UIImageView class]] && view.tag > 0)
{
CGRect frame = view.frame;
frame.origin = CGPointMake(curXLoc, 0);
view.frame = frame;
curXLoc += (kScrollObjWidth);
}
}
// set the content size so it can be scrollable
[scrollView1 setContentSize:CGSizeMake((self.comicPageCount * kScrollObjWidth), [scrollView1 bounds].size.height)];
}
Любая помощь будет оценена по этому вопросу.
Ник