我正在编写一个应用程序(XCode 4.6),它显示各种不同路径的图形 - 现在它只是直线和贝塞尔路径,但最终会变得更复杂。我目前没有使用任何图层,显示实际上非常简单。
我的drawRect代码如下所示:
- (void)drawRect:(CGRect)rect :(int) points :(drawingTypes) type //:(Boolean) initial
{
//CGRect bounds = [[UIScreen mainScreen] bounds];
CGRect appframe= [[UIScreen mainScreen] applicationFrame];
CGContextRef context = UIGraphicsGetCurrentContext();
_helper = [[Draw2DHelper alloc ] initWithBounds :appframe.size.width :appframe.size.height :type];
CGPoint startPoint = [_helper generatePoint] ;
[_uipath moveToPoint:startPoint];
[_uipath setLineWidth: 1.5];
CGContextSetStrokeColorWithColor(context, [UIColor lightGrayColor].CGColor);
CGPoint center = CGPointMake(self.center.y, self.center.x) ;
[_helper createDrawing :type :_uipath :( (points>0) ? points : defaultPointCount) :center];
[_uipath stroke];
}
- (void)drawRect:(CGRect)rect
{
if (_uipath == NULL)
_uipath = [[UIBezierPath alloc] init];
else
[_uipath removeAllPoints];
[self drawRect:rect :self.graphPoints :self.drawingType ];
}
实际路径由辅助对象(_helper)生成。我希望动画显示这条路径,以便在绘制时缓慢显示几秒钟 - 这是最简单,最快速的方法吗?
答案 0 :(得分:2)
你是什么意思“慢慢出现?”我假设你并不是指一次性淡化,而是意味着你希望它看起来像用笔画出的路径?
为此,请执行以下操作:
创建与视图大小相同的CAShapeLayer,并将其添加为视图的子图层。 从你的bezier路径获取CGPath。
将CGPath安装到shapeLayer中。
创建一个CABasicAnimation,将形状图层的strokeEnd属性的值设置为0.0到1.0。这将导致绘制形状,就好像从头到尾一样。您可能想要一个包含单个连续子路径的路径。如果您希望它回转并连接,请将其设置为封闭路径。
您可以使用形状图层和动画更改路径来执行各种很酷的技巧。它的设置(如strokeStart和strokeEnd,stokeColor,fillColor等)如果为路径本身设置动画,则必须确保开始路径和结束路径在内部具有相同数量的控制点。 (并且路径弧很棘手,因为路径具有不同数量的控制点,具体取决于弧的角度。)