2010-03-17 5 views
0

Je construis une application de visionneuse de bande dessinée, qui se compose de deux contrôleurs de vue, le viewcontroller racine affiche essentiellement une vue où un utilisateur décide quelle bande dessinée ils veulent lire en appuyant sur un bouton. Le second viewController affiche en fait la BD comme une uiscrollview avec une barre d'outils et un titre en haut. Donc, le problème que j'ai est que les panneaux d'image comique eux-mêmes ne changent pas de quelle que soit la première bande dessinée que vous allez voir si vous sélectionnez une autre bande dessinée après avoir vu la première. La façon dont je l'ai mis en place, et j'avoue que ce n'est pas exactement mvc, alors s'il vous plaît ne déteste pas, de toute façon la façon dont je l'ai mis en place est chaque image jpg images où les noms d'images de chaque bande dessinée ont un préfixe commun puis un certain nombre comme 'funny1.jpg', 'funny2.jpg', 'funny3.jpg' et 'soda1.jpg', 'soda2.jpg', 'soda3.jpg', etc ...uiscrollview ne pas changer de sous-image

lorsqu'un utilisateur sélectionne une bande dessinée à afficher dans le contrôleur racine, il appelle le délégué et définit les ivars sur les instances du comicviewcontroller appartenant au délégué (mainDelegate.comicViewController.property). Je définis le nombre de panneaux dans cette bande dessinée. nom de la bande dessinée pour l'intitulé du titre et le préfixe de l'image.

Le nombre d'images change (ou au moins le nombre que vous pouvez faire défiler), et le titre change, mais pour une raison quelconque, les images sont les mêmes que celles sur lesquelles vous avez cliqué initialement. Je base cette application entière hors de l'échantillon de code de «défilement» d'Apple.

Je pensais que si j'ajoutais un appel animé viewWillAppear: (BOOL) au comicViewController chaque fois que l'utilisateur cliquait sur le bouton qui le corrigerait mais ce n'était pas le cas, après tout ce qui est le scrollview.

Quoi qu'il en soit ici est un code de chacun des deux contrôleurs:

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

Toute aide serait appréciée à ce sujet.

Nick

Répondre

0

Alors ce que je fini par faire est tout simplement faire plusieurs instances du contrôleur comique à l'intérieur du délégué au lieu de simplement réutilisant une. Mettra à jour ce si je rencontre des problèmes.

Nick

Questions connexes