174 votes

Par programme défiler un UIScrollView

J'ai un UIScrollView , qui a plusieurs points de vue. Lorsqu'un utilisateur effleurements du bout des doigts, la vue défile vers la droite ou vers la gauche selon la direction du doigt à effleurement. Fondamentalement, mon code fonctionne d'une manière similaire à l'iPhone de l'application photo. Maintenant, est-il une manière que je peux par programmation à faire la même chose, de sorte que je me retrouve avec un diaporama qui fonctionne sur son propre avec un clic d'un bouton et d'un configurable de pause entre chaque rouleau?

Comment avez-vous vraiment faire des diaporamas avec UIScrollView?

420voto

KennyTM Points 232647

Vous pouvez faire défiler jusqu'à un certain point dans un rouleau avec vue

[scrollView setContentOffset:CGPointMake(x, y) animated:YES];

Pour faire des diaporamas avec UIScrollView, vous organisez toutes les images dans le défilement de la vue, mettre en place un répétée de la minuterie, puis -setContentOffset:animated: lorsque la minuterie se déclenche.

Mais une approche plus efficace consiste à utiliser 2 vues d'images et de les échanger à l'aide de transitions ou simplement en changeant les lieux lorsque la minuterie se déclenche. Voir http://stackoverflow.com/questions/1631170/iphone-image-slideshow pour plus de détails.

42voto

Jon Schneider Points 2625

Si vous souhaitez garder le contrôle sur la durée et le style de l'animation, vous pouvez le faire:

[UIView animateWithDuration:2.0f delay:0 options:UIViewAnimationOptionCurveLinear animations:^{
    scrollView.contentOffset = CGPointMake(x, y);
} completion:NULL];

Régler la durée (2.0f) et les options (UIViewAnimationOptionCurveLinear) à déguster!

12voto

Une autre façon est

scrollView.contentOffset = CGPointMake(x,y);

0voto

Naveen Points 1
- (void)viewDidLoad
{
    [super viewDidLoad];
    board=[[UIView alloc]initWithFrame:CGRectMake(0, 0, self.view.frame.size.height, 80)];
    board.backgroundColor=[UIColor greenColor];
    [self.view addSubview:board];
    // Do any additional setup after loading the view.
}


-(void)viewDidLayoutSubviews
{


    NSString *str=@"ABCDEFGHIJKLMNOPQRSTUVWXYZ";

    index=1;
    for (int i=0; i<20; i++)
    {
        UILabel *lbl=[[UILabel alloc]initWithFrame:CGRectMake(-50, 15, 50, 50)];
        lbl.tag=i+1;
        lbl.text=[NSString stringWithFormat:@"%c",[str characterAtIndex:arc4random()%str.length]];
        lbl.textColor=[UIColor darkGrayColor];
        lbl.textAlignment=NSTextAlignmentCenter;
        lbl.font=[UIFont systemFontOfSize:40];
        lbl.layer.borderWidth=1;
        lbl.layer.borderColor=[UIColor blackColor].CGColor;
        [board addSubview:lbl];
    }

    [NSTimer scheduledTimerWithTimeInterval:2 target:self selector:@selector(CallAnimation) userInfo:nil repeats:YES];

    NSLog(@"%d",[board subviews].count);
}


-(void)CallAnimation
{

    if (index>20) {
        index=1;
    }
    UIView *aView=[board viewWithTag:index];
    [self doAnimation:aView];
    index++;
    NSLog(@"%d",index);
}

-(void)doAnimation:(UIView*)aView
{
    [UIView animateWithDuration:10 delay:0 options:UIViewAnimationOptionCurveLinear  animations:^{
        aView.frame=CGRectMake(self.view.frame.size.height, 15, 50, 50);
    }
                     completion:^(BOOL isDone)
     {
         if (isDone) {
             //do Somthing
                        aView.frame=CGRectMake(-50, 15, 50, 50);
         }
     }];
}

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