2011-05-11 8 views
1

C'est un sujet familier Im créer un roman graphique en utilisant UIScrollview. Le plan est d'être capable de feuilleter le roman avec un uiscrollview de haut niveau. À l'intérieur de cette section, il y a une série d'uiscrollviews imbriqués qui ont une uimageview intégrée dans chacun d'entre eux. L'idée est que les grandes images peuvent être panoramisées et zoomées mais toujours en même temps. J'ai la plupart de ce travail mais je ne peux pas obtenir le zoom fonctionnant. J'ai implémenté la méthode du délégué zoom, mais en vain, le zoom fait simplement pivoter l'image. Je soupçonne que c'est quelque chose en raison de la nature intégrée des scrollviews imbriqués, mais je ne vois pas ce qui manque. J'ai regardé l'exemple de la suite Apple scrollview mais je n'ai pas trouvé de réponse.Zoom au sein d'UIScrollViews imbriquées

C'est ce que je travaille à ce jour:

- (void)viewDidLoad 

{

[super viewDidLoad]; 


UIScrollView *scrollview = [[UIScrollView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.width,self.view.frame.size.height)]; 
scrollview.pagingEnabled = YES; 
scrollview.scrollEnabled =YES; 
scrollview.clipsToBounds = NO; 
scrollview.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
scrollview.showsHorizontalScrollIndicator = YES; 
scrollview.backgroundColor = [UIColor blackColor]; 

NSInteger viewcount=4; 
NSArray *images = [NSArray arrayWithObjects:[UIImage imageNamed:@"mars.png"],[UIImage imageNamed:@"mercury.png"],[UIImage imageNamed:@"neptune.png"],[UIImage imageNamed:@"venus.png"],nil]; 

for (int i = 0; i <viewcount; i++) 
{ 
    CGFloat x = i * self.view.frame.size.width; 

    subView = [[UIScrollView alloc]initWithFrame:CGRectMake(x, 0, self.view.frame.size.width, self.view.frame.size.height)]; 


    [subView setBackgroundColor:[UIColor blackColor]]; 
    [subView setCanCancelContentTouches:NO]; 
    subView.clipsToBounds = NO; // default is NO, we want to restrict drawing within our scrollview 
    subView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
    aImageView = [[UIImageView alloc ] initWithImage:[images objectAtIndex:i]]; 
    [self.aImageView setTag:ZOOM_VIEW_TAG]; 
    [subView addSubview:aImageView]; 
    [subView setContentSize:CGSizeMake(aImageView.frame.size.width, subView.frame.size.height)]; 
    subView.minimumZoomScale = 1; 
    subView.maximumZoomScale = 3; 
    subView.delegate = self; 
    [subView setScrollEnabled:YES]; 
    subView.contentSize = aImageView.frame.size; 
    [scrollview addSubview:subView]; 
    [subView release]; 
} 



[self.view addSubview:scrollview]; 

} 



-(UIView *) viewForZoomingInScrollView:(UIScrollView *)scrollView { 
NSLog (@"test"); 
UIView * view = nil; 
view = [subView viewWithTag:ZOOM_VIEW_TAG]; 

return view; 
} 
+0

Impossible de vérifier maintenant mais de voir si userInteractionEnabled vaut par défaut YES pour UIScrollView. Je me souviens d'avoir ajouté des sous-vues exactement de la même manière que vous parce que je voulais réaliser la même chose. Vérifiez également les autres indicateurs qui pourraient interférer avec l'événement tactile. – TheBlack

Répondre

3

A travaillé ceci, pour quelqu'un d'autre d'essayer de le faire. Une chose que j'ai manqué une ligne de code sur le poste ci-dessus qui est tout à fait fondamental!, Dans la méthode viewdidLoad juste au-dessus de [self.view addSubview: scrollview]; il doit être le suivant qui calcule la largeur de l'ensemble des sous-vues

scrollview.contentSize = CGSizeMake(self.view.frame.size.width*viewcount,self.view.frame.size.height); 

Le code dans le groupe - (UIView *) viewForZoomingInScrollView: (UIScrollView *) ScrollView { méthode doit être:

return [scrollView.subviews objectAtIndex:0]; 

Cela vous permet de zoomer et de faire défiler les images et aussi de faire défiler une série d'images très bien. Vous n'avez qu'à vérifier comment revenir automatiquement à la taille d'origine lors du passage à l'image suivante car il reste zoomé lors de la pagination le long ..

+0

Avez-vous trouvé comment redimensionner la sous-vue agrandie? – malaki1974