(Réglé) UIScrollView contenu dans une autre UIScrollView

Ben77650Ben77650 Membre
juillet 2014 modifié dans API UIKit #1

Bonjour,


 


Je viens vers vous car j'ai un problème d'UIScrollView. Ma UIView possède 2 UIScrollView, une qui contient toutes les infos relative à  l'annonce (que j'ai appelée "scroll"), et ma deuxième qui contient uniquement mes UIImageView (appelée "scrollImage").


 


J'ai donc fixé ma hauteur et ma largeur (de 320) sur ma ScrollView scroll, et tout fonctionne très bien, aucun problème, j'arrive bien à  scroller vers le bas.


 


En revanche je n'arrive pas à  scroller ma ScrollView scrollImage vers la droite.


 


Voila le code correspondant:



self.scroll.delegate=self;
    [self.scroll setScrollEnabled:YES];
    
    self.scrollImage.delegate=self;
    [self.scrollImage setScrollEnabled:YES];
    
    
    
    //[_scrollImage setContentSize:(CGSizeMake(400, 100))];
    
    CGRect contRect = CGRectZero;
    
    contRect.size.height=100;
    contRect.size.width=400;
    self.scrollImage.contentSize=contRect.size;
    
    [_scroll addSubview:_scrollImage];

    ...

    CGRect contentRect = CGRectZero;
    
    for(UIView *view in self.scroll.subviews)
    {
       contentRect = CGRectUnion(contentRect, view.frame);
    }
    
    
    contentRect.size.height+=20;
    contentRect.size.width=320;
    self.scroll.contentSize=contentRect.size;

Merci à  ceux qui prendront la peine de m'aider


Mots clés:

Réponses

  • et si tu augmentes le contentSize ? et vérifie aussi que ton outlet est bien connectée.


  • Si j'augmente le contentSize rien du tout, oui l'IBOutlet est bien connecté



    @property (weak, nonatomic) IBOutlet UIScrollView *scrollImage;
  • Bonjour,


     


    Je n'ai toujours pas réussi à  régler le problème et je suis toujours preneur de la solution.


     


    Merci d'avance


  • NasatyaNasatya Membre
    juillet 2014 modifié #5

    Bon déjà  tu pourrais utiliser un CGSize plus qu'un CGRect en vrais ça change pas grand chose mais bon c'est plus cohérent. 


    Ensuite je penses que tu pourrais faire plus de chose dans les storyboard genre set les delegates et enable les scroll juste dans le but d'alléger la lecture du code (pareil ça changera pas grand chose sur le fonctionnement de l'application).


    Question bête mais vu le screen je me la pose quand même quel est la taille de ton scrollImage? Parce qu'on la vois dépasser sur le coté droit?

  • Ben77650Ben77650 Membre
    juillet 2014 modifié #6

    La taille de mon scrollImage dans le XIB est la même que celle définie dans le code à  savoir 400*100


     


    Je vais passer le CGRect en CGSize alors


     


    Edit: et voila c'est fait



    CGSize mySize;
        
        mySize.height=100;
        mySize.width=400;
        self.scrollImage.contentSize=mySize;

  • Ok alors si la frame est égale au contentSize te pose pas de question sur le pourquoi ça scroll pas c'est une features de la scrollView. Ta scroll devrait avoir une frame.size.width de 320 et une contentSize.width de 400 et la ça scroll sans souci. Fait attention quand tu set tes objets le contentSize c'est bien comme sont nom l'indique la taille total du contenu de la scroll quant à  sa size c'est la taille de l'objet affiché si ta contentSize est plus petite ou égal a ta size la scroll view ne scroll pas.


  • C'est effectivement ça, thanks a lot, je retiendrais pour la prochaine fois ;)


  • Pourquoi tu n'utilises pas une collectionView à  la place de ta scrollView pour tes images ? ça te calculerai automatiquement la contentSize de ta scrollView et ça te faciliterai le travail.


  • Je connais pas vraiment le système de collectionView, et plutôt bien le concept de scollView, voila une réponse plutôt simple ;)


     


    Mais je vais prendre un peu de temps pour regarder comment fonctionne la collectionView ;)


  • Si je comprends bien la UICollectionView fonctionne un peu (dans les grandes lignes) comme une UITableView, c'est bien ça ? Quelqu'un peut il me le confirmer


  • Oui dans les grandes lignes c'est un peu le même système.


  • Ok merci :)


  • Salut, 


     


    J'aurai une question concernant le problème dans lequel je suis :

     

    j'ai actuellement un UIScrollView avec une image par scroll tout cela fonctionne bien, mais j'aimerai ajouter une image gif animée dans la 5ème page du scroll, j'ai bien réussi à  l'ajouter mais j'arrive pas à  l'animer comme prévu.

    Si quelqu'un pourrait m'aider là -dessus ça serait super-sympa.

     


    Code source .m




    - (void) viewDidLoad
    {
    // Création du ScrollView //
        //Put the names of our image files in our array.
        imageArray = [[NSArrayalloc] initWithObjects:@page1.jpg,@page2.jpg,@page3.jpg,@page4.jpg,@page5.png,@page6.png,@page7.png,@page8.jpg,@page9.jpg,@page10.jpg,@page11.jpg,@page12.jpg,@page13.png,@page14.jpg,@page15.jpg,@page16.jpg,@page17.jpg,@page18.png,@page19.jpg,@page20.jpg,@page21.jpg,@page22.png,@page23.png,@page24.png,@page25.jpg,@page26.jpg,@page27.jpg,@page28.jpg, nil];
        
        
        imageArray2 = [[NSArrayalloc]
                       initWithObjects:@cercle1.tiff, @cercle2.tiff, @cercle3.tiff, nil];
        
        
        
        //Set the content size of our scrollview according to the total width of our imageView objects.
        scrollView.contentSize = CGSizeMake(scrollView.frame.size.width * [imageArraycount], scrollView.frame.size.height);
        
        
        
        self.scrollView.pagingEnabled = YES;
        
        
        for (int i = 0; i < [imageArray count]; i++) {
            //We'll create an imageView object in every 'page' of our scrollView.
            CGRect frame;
            frame.origin.x = self.scrollView.frame.size.width * i;
            frame.origin.y = 0;
            frame.size = self.scrollView.frame.size;
            
            imageView = [[UIImageViewalloc] initWithFrame:frame];
            imageView.image = [UIImageimageNamed:[imageArrayobjectAtIndex:i]];
            [self.scrollViewaddSubview:imageView];
            
        }
        
        for (int i = 0; i < [imageArray2 count]; i++) {
            //We'll create an imageView object in every 'page' of our scrollView.
            CGRect frame;
            frame.origin.x = self.scrollView.frame.size.width * 2;
            frame.origin.y = 0;
            frame.size = self.scrollView.frame.size;
            
            
            
            
            
            
            
            
            imageView = [[UIImageViewalloc] initWithFrame:frame];
            imageView.image = [UIImageimageNamed:[imageArray2objectAtIndex:i]];
            [self.scrollViewaddSubview:imageView];
            
        }








    #pragma mark - UIScrollView Delegate
    - (void)scrollViewDidScroll:(UIScrollView *)sender
    {
        static NSInteger previousPage = 0;
        CGFloat pageWidth = scrollView.frame.size.width;
        float fractionalPage = scrollView.contentOffset.x / pageWidth;
        NSInteger page = lround(fractionalPage);
        
        
        if (previousPage != page)
        {
            previousPage = page;
            
            if(page == 0)
            {


            }
            if(page == 1) // ETC...
        }
    }

    On m'a parler de conteneur web (UIWebView), mais j'arrive pas du tous à  placer ce conteneur à  la 5 ème page du scroll ?



     


    Merci d'avance,


    Bilel 


  • Hello Bilel,


     


    Crée plutôt un nouveau post, et non pas poster dans la discussion des autres. Tu peux participer aux autres discussions en donnant tes réponses/suggestions/....


     


    Il faut se présenter aussi dans la rubrique "Présentation des membres", comme tu es nouveau :)


     


    Et bienvenue !




  • Si je comprends bien la UICollectionView fonctionne un peu (dans les grandes lignes) comme une UITableView, c'est bien ça ? Quelqu'un peut il me le confirmer




    Oui si tu connais le fonctionnement des tableView tu comprendras et tu maitriseras facilement les collectionView. Il y a pas mal de sessions de WWDC sur les collectionView dont une qui s'appelle "Advanced user interface with collection views" qui est assez intéressante.

  • OK merci Benjo' ;)


Connectez-vous ou Inscrivez-vous pour répondre.