3 votes

Création programmée de UIScrollView

J'essaie de créer un UIScrollView par programme. Je définis une propriété et je la synthétise.

@property (weak, nonatomic) IBOutlet UIScrollView *topScrollView;
@synthesize topScrollView;

Je dispose alors d'une méthode qui permet de réaliser cette opération.

[topScrollView setFrame:CGRectMake(320, 0, 320, 65)];
[topScrollView setContentSize:CGSizeMake(500, 100)];
[topScrollView setBackgroundColor:[UIColor greenColor]];
[topScrollView setScrollEnabled:YES];
[topScrollView setShowsHorizontalScrollIndicator:YES];
[topScrollView setShowsVerticalScrollIndicator:NO];
[[self view] addSubview:topScrollView]; 

Je l'ai placé dans viewDidLoad. Cela ne crée pas la vue de défilement. Je pense que c'est parce que la vue de défilement n'a pas été initialisée. Je peux faire l'allocation et l'initialisation dans la méthode ci-dessus, mais lorsque je veux l'utiliser dans une autre méthode, cela ne fonctionne pas. J'ai consulté UIScrollView ajouté par programme et utilisé dans plusieurs méthodes mais cela n'a pas été d'une grande aide. Il existe probablement une solution simple que je ne connais pas. Que puis-je faire pour créer programmatiquement cette vue de défilement et pouvoir l'utiliser dans une autre méthode (principalement pour conduire des animations avec elle).

Gracias,

Ivan

2voto

Caleb Points 72897

Je pense que c'est parce que la vue de défilement n'a pas été initialisée.

C'est vrai.

Je peux faire l'allocation et l'initialisation dans la méthode ci-dessus mais lorsque je veux l'utiliser dans une autre méthode, cela ne fonctionne pas.

Il le fera si vous assignez votre nouvelle vue de défilement à une propriété ou à une variable d'instance. C'est à cela qu'elles servent.

Oh, encore une chose. Vous devrez vous assurer que votre vue de défilement est conservée d'une manière ou d'une autre. Cela signifie que vous devez modifier votre topScrollView à la propriété strong ou l'ajouter à une vue (qui la conservera), ou les deux.

0voto

SVMRAJESH Points 1685

S Vous pouvez créer plusieurs fois si vous avez besoin de moyens

- (void)scrollView
{

    int x = 0;
    int y = 10;
    for(int i=0; i<5; i++)
    {
        UIScrollView *scrollview=[[UIScrollView alloc]initWithFrame:CGRectMake(x, y, 50, 50)];
        scrollview.showsVerticalScrollIndicator=YES;
        scrollview.scrollEnabled=YES;
        scrollview.userInteractionEnabled=YES;
        scrollview.backgroundColor = [UIColor greenColor];
        [self.view addSubview:scrollview];
        //scrollview.contentSize = CGSizeMake(50,50);
        x=x+55;
    }
}

0voto

Kupendiran iOS Points 207

Vous pouvez utiliser le code ci-dessous pour ajouter UIScrollView à votreView :-

Étape 1 :

Delegate "UIScrollViewDelegate" to your ViewController.h

for example:
  @interface yourViewController:UIViewController<UIScrollViewDelegate> 

Étape 2 :

//create you UIScrollView
UIScrollView  *MyScrollVw= [[UIScrollView alloc]initWithFrame:CGRectMake(0 ,0 ,320 ,480)]; 
MyScrollVw.delegate= self;
[MyScrollVw setShowsHorizontalScrollIndicator:NO];
[MyScrollVw setShowsVerticalScrollIndicator:YES];
MyScrollVw.scrollEnabled= YES;
MyScrollVw.userInteractionEnabled= YES;
[yourView addSubview:MyScrollVw];
MyScrollVw.contentSize= CGSizeMake(320 ,1500);//(width,height)

Étape 3 :

vous voulez implémenter les délégués scrollView dans ViewController.m

-(UIView *)viewForZoomingInScrollView:(UIScrollView *)scrollView{
   return imgView;
}
-(void)scrollViewDidEndDecelerating:(UIScrollView *)scrollView{
   NSLog(@"Did end decelerating");
   //do your code here
}   
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
   NSLog(@"Did scroll");
   //do your code here
}
-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{
    NSLog(@"Did end dragging");
   //do your code here
}
-(void)scrollViewWillBeginDecelerating:(UIScrollView *)scrollView{
    NSLog(@"Did begin decelerating");
   //do your code here
}
-(void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
   NSLog(@"Did begin dragging");
   //do your code here
}

0voto

Wissa Points 82

La méthode programmatique directe dans SWIFT

En résumé

Créer un UIScrollView

let scrollView = UIScrollView() 
scrollView.translatesAutoresizingMaskIntoConstraints = false

Utiliser une vue enfant unique pour contenir toutes les sous-vues de votre contenu

let contentView = UIView()
contentView..translatesAutoresizingMaskIntoConstraints = false

En général, vous souhaitez que votre contenu défile dans une seule direction. Dans la plupart des cas, il s'agit d'un défilement vertical. C'est pourquoi la largeur de l'affichage du contenu doit correspondre à la largeur de l'affichage du défilement.

NSLayoutConstraint.activate([
    contentView.widthAnchor.constraint(equalTo: scrollView.widthAnchor)

Attachez quatre contraintes (haut, bas, gauche, droite) de notre vue de contenu unique à la vue de défilement.

    contentView.topAnchor.constraint(equalTo: scrollView.topAnchor),
    contentView.leadingAnchor.constraint(equalTo: scrollView.leadingAnchor),
    contentView.trailingAnchor.constraint(equalTo: scrollView.trailingAnchor),
    contentView.bottomAnchor.constraint(equalTo: scrollView.bottomAnchor),

Assurez-vous d'avoir contraintes liées aux quatre côtés de la vue du contenu afin qu'il s'étende à la taille de votre contenu.

// After Adding your subviews to the contentView make sure you've those two constraints set:

    firstSubView.topAnchor.constraint(equalTo: contentView.topAnchor),
    .
    .
    .
    lastSubView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])

Référence : Utilisation de UIScrollView avec Auto Layout dans iOS

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X