J'utilise NSTimer pour actualiser 5 contextes et les coller sur 5 vues toutes les 0,03 secondes. Cela a bien fonctionné dans le simulateur et a fonctionné à un taux de trame très élevé, mais il a ensuite décroché lorsqu'il a été déployé sur un iPod. J'ai baissé le taux à .1 et vu peu d'amélioration. Existe-t-il un moyen plus efficace de redessiner ces contextes?Mauvaises performances de l'appareil lors de la redéfinition des vues
Certains code:
- (void)addViews{
[self.superview addSubview:mag];
[self.superview addSubview:vc];
[self.superview addSubview:na];
[self.superview addSubview:wave];
[self.superview addSubview:mon];
[self.superview addSubview:selector];
looper = [NSTimer timerWithTimeInterval:0.03
target:self
selector:@selector(setNeeds)
userInfo:nil
repeats:YES];
[[NSRunLoop mainRunLoop] addTimer:looper forMode:NSRunLoopCommonModes];
}
-(void)setNeeds{
[mag setNeedsDisplay];
[vc setNeedsDisplay];
[na setNeedsDisplay];
[wave setNeedsDisplay];
[mon setNeedsDisplay];
}
Ceci est l'ajustement du contexte appliqué à chaque vue. Essentiellement une loupe.
- (void)drawRect:(CGRect)rect {
CGPoint magnifiedPoint = [viewToMagnify convertPoint:coordPoint fromView:self.superview];
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextTranslateCTM(context,(self.frame.size.width*0.5),(self.frame.size.height*0.5));
CGContextScaleCTM(context, 1.3, 1.3);
CGContextTranslateCTM(context,-1*(magnifiedPoint.x),-1*(magnifiedPoint.y));
[self.viewToMagnify.layer renderInContext:context];
}
Probablement. Il est difficile d'en être sûr sans voir votre code, cependant. –
Oui, c'est définitivement un problème de redessiner les contextes sur les vues. Je fais simplement trop de vues trop vite. J'aurais aimé connaître une méthode plus efficace. – MyNameIsKo
Question évidente: pourquoi la minuterie? N'y a-t-il pas un événement (toucher/glisser pour déplacer la vitre d'exposition, données sous-jacentes modifiées, etc.) que vous pourriez raccorder à la place de ce mécanisme d'interrogation que vous avez construit? –