Я использую NSTimer для обновления 5 контекстов и вставки их в 5 представлений каждые 0,03 секунды. Это отлично работало в симуляторе и работало с большой частотой кадров, но затем запускалось на iPod. Я понизил курс до .1 и увидел небольшое улучшение. Есть ли более эффективный способ перерисовки этих контекстов?
Код:
- (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];
}
Это настройка контекста, применяемая к каждому представлению. По сути увеличительное стекло.
- (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];
}