मैं ड्राइंग पथों के साथ खेल रहा था, और मैंने देखा कि कम से कम कुछ मामलों में, UIBezierPath ने मुझे लगता है कि कोर ग्राफिक्स समकक्ष होगा। -drawRect:
एक UIBezierPath, और एक CGPath: नीचे दी गई विधि दो रास्ते बनाता है। रास्ते अपने स्थानों को छोड़कर समान हैं, लेकिन CGPath को पथपाकर UIBezPath को पथपाकर के रूप में लगभग दो बार लेता है।
- (void)drawRect:(CGRect)rect
{
CGContextRef ctx = UIGraphicsGetCurrentContext();
// Create the two paths, cgpath and uipath.
CGMutablePathRef cgpath = CGPathCreateMutable();
CGPathMoveToPoint(cgpath, NULL, 0, 100);
UIBezierPath *uipath = [[UIBezierPath alloc] init];
[uipath moveToPoint:CGPointMake(0, 200)];
// Add 200 curve segments to each path.
int iterations = 200;
CGFloat cgBaseline = 100;
CGFloat uiBaseline = 200;
CGFloat xincrement = self.bounds.size.width / iterations;
for (CGFloat x1 = 0, x2 = xincrement;
x2 < self.bounds.size.width;
x1 = x2, x2 += xincrement)
{
CGPathAddCurveToPoint(cgpath, NULL, x1, cgBaseline-50, x2, cgBaseline+50, x2, cgBaseline);
[uipath addCurveToPoint:CGPointMake(x2, uiBaseline)
controlPoint1:CGPointMake(x1, uiBaseline-50)
controlPoint2:CGPointMake(x2, uiBaseline+50)];
}
[[UIColor blackColor] setStroke];
CGContextAddPath(ctx, cgpath);
// Stroke each path.
[self strokeContext:ctx];
[self strokeUIBezierPath:uipath];
[uipath release];
CGPathRelease(cgpath);
}
- (void)strokeContext:(CGContextRef)context
{
CGContextStrokePath(context);
}
- (void)strokeUIBezierPath:(UIBezierPath*)path
{
[path stroke];
}
दोनों पथ CGContextStrokePath () का उपयोग करते हैं, इसलिए मैंने प्रत्येक पथ को स्ट्रोक करने के लिए अलग-अलग तरीके बनाए ताकि मैं प्रत्येक पथ द्वारा प्रयुक्त समय को इंस्ट्रूमेंट्स में देख सकूं। नीचे विशिष्ट परिणाम हैं (कॉल ट्री उल्टा); आप देख सकते हैं कि -strokeContext:
9.5 सेकंड लगते हैं।, जबकि -strokeUIBezierPath:
केवल 5 सेकंड लगते हैं।:
Running (Self) Symbol Name
14638.0ms 88.2% CGContextStrokePath
9587.0ms 57.8% -[QuartzTestView strokeContext:]
5051.0ms 30.4% -[UIBezierPath stroke]
5051.0ms 30.4% -[QuartzTestView strokeUIBezierPath:]
ऐसा लगता है कि UIBezierPath किसी तरह से उस पथ का अनुकूलन कर रहा है जो इसे बनाता है, या मैं भोले तरीके से CGPath बना रहा हूं। मैं अपने CGPath ड्राइंग को गति देने के लिए क्या कर सकता हूं?