Je suis nouveau à Quartz2d donc j'espère que c'est une question facile à répondre.Quartz2D et écrêtage - Optimiser cette routine de dessin?
J'ai un scrollview dont la trame de contenu est 1024x768. Dans ce cadre, je pousse une vue personnalisée (avec l'image 1024x768) qui utilise Quartz2d pour faire un dessin. L'idée est, j'ai une grande zone que l'utilisateur peut faire défiler pour voir différentes parties.
Le problème que j'ai est, quand je fais défiler sur l'appareil, je reçois des erreurs d'avertissement de mémoire ou de performances de défilement terribles. C'est sans doute parce que je redessine tout le champ 1024x768. Je pensais que définir le chemin de détourage à l'offset UIScrollView aiderait .. et il le fait .. jusqu'à ce que je défile .. auquel cas la vue ne se redessine pas jusqu'à ce que le défilement s'arrête. dire à la vue de dessiner pendant scrollViewDidScroll entraîne également de mauvaises performances
quelqu'un peut-il me dire comment je peux optimiser ma routine de dessin?
i ont deux images .. dont un est se masqué, et les deux étant peints à l'écran (l'un sur l'autre)
- (void)drawRect:(CGRect)dirtyRect {
CGContextRef myContext = UIGraphicsGetCurrentContext();
// get our offset (where we've scrolled to)
CGPoint offset = scrollView.contentOffset;
// clip to our offset.. uncomment for good performance but terrible scrolling
//CGContextClipToRect(myContext, CGRectMake(offset.x, offset.y, 480, 320));
// make an image from the mask context
CGImageRef aMaskImage = CGBitmapContextCreateImage (myMaskContext);
// mask the first image
CGImageRef aImage = CGImageCreateWithMask(myImageRef1, aMaskImage);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), myImageRef1);
CGContextDrawImage(myContext, CGRectMake(0, 0, self.frame.size.width, self.frame.size.height), aImage);
CGImageRelease(aImage);
CGImageRelease(aMaskImage);
}
merci à l'avance pour toute aide que vous pouvez fournir !
merci. Je n'ai pas le temps de regarder cela maintenant, mais j'attribue cette réponse comme la seule et semble raisonnable. :) – dev
Je suppose que l'autre réponse est d'observer l'argument dirtyRect, mais je pense que CATiledLayer est plus susceptible d'aider. –