uiscrollview не переключает подвиды изображения

Я создаю приложение для просмотра комиксов, состоящее из двух контроллеров представления, корневой контроллер представления в основном отображает представление, в котором пользователь решает, какой комикс он хочет прочитать, нажав кнопку. Второй 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 каждый раз, когда пользователь нажимал кнопку, это исправило бы это, но это не так, в конце концов, именно здесь выкладывается вид прокрутки.

Во всяком случае, вот некоторый код от каждого из двух контроллеров:

Корневой контроллер:

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

комиксВьюКонтроллер:

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

Любая помощь будет оценена по этому поводу.

Ник


person nickthedude    schedule 17.03.2010    source источник


Ответы (1)


Итак, в итоге я просто создал несколько экземпляров контроллера комиксов внутри делегата, а не просто повторно использовал один. Обновлю это, если у меня возникнут проблемы.

Ник

person nickthedude    schedule 18.03.2010