Animer un changement de couleur quand -drawRect: est utilisée
Bonjour !
Je découvre les animations. Pour l'instant, tout ce que je connais est [UIView animate...]. Cette méthode ne marche pas me semble-t-il pour animer des @property animables, lorsque des changements sont faits via CoreGraphics.
Confirmez-vous cela ?
Y a-t-il moyen de faire autrement (dans mon cas, je veux changer la backgroundColor) ?
Plus précisément, voici ce que je fais dans drawRect: (je dessine un pdf)
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
CGContextGetCTM(ctx);
CGContextScaleCTM(ctx, 1, -1);
CGContextTranslateCTM(ctx, 0, -rect.size.height);
CGContextScaleCTM(ctx,
rect.size.width / self.page.size.width,
rect.size.height / self.page.size.height);
CGContextDrawPDFPage(ctx, self.page.coreObject);
}
et voici mon animation :
[UIView animateWithDuration:3
animations:^{
view.backgroundColor = [UIColor blueColor] ;
}];
Le changement de couleur marche mais sans animation
Si vous avez des pistes de recherche, je suis preneur !
PS : je précise que dans le cas qui m'intéresse, si j'efface le -drawRect: l'animation marche
PS2 : si j'utilise
CGContextSetRGBFillColor(ctx, 1, 1, 1, 1);
CGContextFillRect(ctx, rect);
dans la méthode -drawRect: pour setter la couleur, ça ne marche pas non plus.
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
J'ai peur qu'il ne faille utiliser Core Animation et les CALayer pour faire ça.
Ou alors faire une animation explicite (CAAnimation, existe sur iOS ?) qui te permet de dégrader une couleur vers une autre et qui appelle drawRect à intervalles réguliers.
Je pensais que la couleur de fond de la vue était en fait appliquée sur la CALayer, mais d'après ce que tu décris, ce n'est pas le cas.
Sinon, il te reste deux solutions:
- attaquer directement la layer qui possède une propriété backgroundColor.
- mettre ta vue dans une autre vue qui servira uniquement à fixer la couleur de fond. Cette solution aurait ma préférence.
@Céroce : "- mettre ta vue dans une autre vue qui servira uniquement à fixer la couleur de fond. Cette solution aurait ma préférence." --> je pense que ça ne va pas marcher. Une fois le drawRect: fait (à partir du pdf), la vue en dessous n'est plus visible. Même si je ne mets pas de couleur de fond, le fond est blanc et pas transparent.
Finalement, j'ai l'impression que cette méthode marche :
J'ai trouvé cette méthode sur SO.
Oui, tu dois avoir raison.
Ce que j'ai testé, c'est la vue PDF par dessus une autre vue (et non dans une autre vue).