Question

Je suis en train de créer un programme de dessin simple pour iPhone.Pour le moment, les événements tactiles ajoutent leur emplacement à une liste qui est connectée à un groupe d'appels CGContextAddLineToPoint qui sont redessinés à chaque appel à drawRect.

Je rencontre des problèmes de performances avec un nombre de lignes assez faible (elles sont cependant transparentes), j'ai donc essayé de tout dessiner dans un CGLayer.Désormais, au lieu de dessiner chaque ligne à chaque image, il dessine chaque ligne une seule fois et dessine le CGLayer à l'écran à chaque image.

        CGContextRef backgroundContext = CGLayerGetContext(pathBuffer);
        CGContextSetLineWidth(backgroundContext, 2.0);
        CGContextSetLineCap(backgroundContext, kCGLineCapButt);
        CGContextSetStrokeColorWithColor(backgroundContext, [pathColor CGColor]);

        if([[touchPoints objectAtIndex:0] continuesToNextPoint])
        {
            CGContextMoveToPoint(backgroundContext, [[touchPoints objectAtIndex:0] point].x, [[touchPoints objectAtIndex:0] point].y);
            CGContextAddLineToPoint(backgroundContext, [[touchPoints objectAtIndex:1] point].x, [[touchPoints objectAtIndex:1] point].y);
            CGContextStrokePath(backgroundContext);
        }

        //remove it from touchpoints
        [touchPoints removeObjectAtIndex:0];
    }

    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextDrawLayerAtPoint(context, CGPointMake(0, 0), pathBuffer);

Ceci, au contraire, est PLUS LENT que ce que je faisais auparavant.Est-ce que je fais quelque chose de mal?Serais-je mieux servi en dessinant sur une UIImage ou quelque chose comme ça ?Merci.

Était-ce utile?

La solution

Ce que vous devriez faire, c'est insérer un CALayer dans l'une de vos vues, en mettant à jour la couche, puis en appelant setNeedsDisplayInRect: avec les limites de la zone qui a changé sur le calque, ce qui entraîne sa mise à jour.Si vous essayez de mettre à jour tout l’écran, cela va être lent.

Utilisez-vous des instruments pour déterminer quelles parties sont lentes ?Je recommande de l'utiliser pour savoir quelles parties vous ralentissent.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top