UIBezierPath に多くの (10000+) 行を追加するループがあります。これで問題ないように見えますが、ベジェパスをレンダリングしようとすると、デバイスが非常に遅くなり、ぎくしゃくします。これは、パスに追加した行が多すぎるためですか?
UIBezierPath への行の追加 - 簡略化: (これで問題ないようです)
[path moveToPoint:CGPointZero];
for (int i = 0; i < 10000; i++ ) {
[path addLineToPoint:CGPointMake(i, i)];
}
BeizerPath のレンダリング (Rob による提案) - これは遅いようです。
- (void)drawBezierAnimate:(BOOL)animate
{
UIBezierPath *bezierPath = path;
CAShapeLayer *bezier = [[CAShapeLayer alloc] init];
bezier.path = bezierPath.CGPath;
bezier.strokeColor = [UIColor blueColor].CGColor;
bezier.fillColor = [UIColor clearColor].CGColor;
bezier.lineWidth = 2.0;
bezier.strokeStart = 0.0;
bezier.strokeEnd = 1.0;
[self.layer addSublayer:bezier];
if (animate)
{
CABasicAnimation *animateStrokeEnd = [CABasicAnimation animationWithKeyPath:@"strokeEnd"];
animateStrokeEnd.duration = 100.0;
animateStrokeEnd.fromValue = [NSNumber numberWithFloat:0.0f];
animateStrokeEnd.toValue = [NSNumber numberWithFloat:1.0f];
[bezier addAnimation:animateStrokeEnd forKey:@"strokeEndAnimation"];
}
}
質問:
1) これは、追加するパスが多すぎるためですか?
2) 最終的にはさまざまな色のさまざまな線を描画したいので、複数 (10000 以上) の UIBezierPaths を作成する必要があると思います。
3) どうすればこれを回避できますか?
よろしくお願いします。