2010-05-30 6 views
0

J'ai une page pdf affichée avec CGContextDrawPDFPage dans l'exemple d'application QuartzDemo.Animation d'image sur CGContextDrawPDFPage

Je souhaite que cette page s'affiche et qu'une image soit glissée par-dessus cette page, comme dans l'application iBooks.

C'est un livre, l'image glissante est un signet qui glisse lorsque vous êtes sur le point de fermer le livre.

J'ajouté ce code par DyingCactus (indice: im un débutant OBJ c et iphone dev) comme suit:

En QuartzViewController.m, l'animation commence à montrer mais la vue glisse loin avant que l'animation C'est fini, en fait je pense que l'animation continue pendant que la vue glisse.

-(void)viewWillDisappear:(BOOL)animated 
{ 
    [self.quartzView setFrame:CGRectMake(150, -200, 100, 200)]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDuration:1.0]; 
    [self.quartzView setFrame:CGRectMake(150, 0, 100, 200)]; 
    [UIView commitAnimations]; 
} 

Comment puis-je garder la vue visible et terminer l'animation avant que la vue ne disparaisse?

Répondre

0

Je suppose que vous modifiez l'exemple d'application QuartzDemo d'Apple.

La meilleure façon que je puisse penser maintenant est de remplacer le bouton de retour sur le contrôleur de navigation avec votre propre bouton lorsque la vue affichée est la vue PDF.

Votre bouton de retour personnalisé peut ensuite gérer l'animation et afficher la séquence de popping au besoin. Le seul inconvénient est que le bouton arrière n'a plus la forme d'une flèche vers la gauche.

Voici les changements nécessaires QuartzViewController.m:

#import "QuartzImages.h" //<-- add this import 
... 
-(void)viewDidLoad 
{ 
    // Add the QuartzView 
    [scrollView addSubview:self.quartzView]; 

    //add custom back button if this is the PDF view... 
    if ([self.quartzView isKindOfClass:[QuartzPDFView class]]) 
    { 
     self.navigationItem.leftBarButtonItem = 
     [[UIBarButtonItem alloc] initWithTitle:@"QuartzDemo" 
           style:UIBarButtonItemStyleBordered 
           target:self 
           action:@selector(myBackButtonHandler:)]; 
    } 
} 

- (void)myBackButtonHandler:(id)sender 
{ 
    [self.quartzView setFrame:CGRectMake(150, -200, 100, 200)]; 
    [UIView beginAnimations:nil context:nil]; 
    [UIView setAnimationDelegate:self]; 
    [UIView setAnimationDidStopSelector:@selector(animationDidStop:finished:context:)]; 
    [UIView setAnimationDuration:1.0]; 
    [self.quartzView setFrame:CGRectMake(150, 0, 100, 200)]; 
    [UIView commitAnimations]; 
} 

- (void)animationDidStop:(NSString *)animationID finished:(NSNumber *)finished context:(void *)context 
{ 
    [self.navigationController popViewControllerAnimated:YES]; 
}