NSTimerを使用して5つのコンテキストを更新し、0.03秒ごとに5つのビューに貼り付けています。これはシミュレータでうまく動作し、素晴らしいフレームレートで動作しましたが、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];
}
おそらく、あなたのコードを見ることなく、確かめるのは難しいですが、精緻化するのに気をつけますか? –
ええ、それは間違いなくビューにコンテキストを再描画する際の問題です。私はあまりにも多くのビューにあまりにも速くそれをやっているだけです。私はより効率的な方法を知りたがっています。 – MyNameIsKo
明らかな質問:なぜタイマーですか?あなたが構築したこのポーリングメカニズムの代わりに、あなたが引っ掛けることができるいくつかのイベント(マジックガラスを動かすためのタッチ/ドラッグ、基礎となるデータの変更など)はありませんか? –