我在iPhone上的路径上设置对象的动画。该代码使用CAKeyframeAnimation
效果很好。出于调试目的,我想在屏幕上绘制线条。我似乎无法使用当前的CGContextRef
来做到这一点。到处看,它说你需要子类化UIView,然后覆盖drawRect方法在屏幕上绘制。有没有办法解决?如果没有,我如何将数据传递给drawRect方法,以便它知道绘制什么?
编辑: 好。我最终继承了UIView并在drawRect方法中实现了绘图。我可以通过在子类视图中创建另一个方法(称为drawPath)来绘制到屏幕,该方法设置实例变量然后调用setNeedsDisplay。这反过来触发drawRect方法,该方法使用实例变量绘制到屏幕。这是最好的做法吗?如果我想绘制20多条路径会发生什么。我不应该为所有这些创建属性。
答案 0 :(得分:6)
在UIView的drawRect方法中放了一些这样的代码
CGContextRef context = UIGraphicsGetCurrentContext();
CGContextSetRGBStrokeColor(context, 1.0, 0,0 , 0.0);
CGContextSetLineWidth(context, 3.f);
CGContextBeginPath(context);
CGContextMoveToPoint(context,x1,y1);
CGContextAddLineToPoint(context, x2 , y2);
CGContextStrokePath(context);
答案 1 :(得分:0)
如果要使用Core Graphics绘图,请使用CALayer
。如果您不想将其子类化,请将绘图委托给视图。
- (id)initWithFrame:(CGRect)frame
{
self = [super initWithFrame:frame];
if (self)
{
CALayer* myLayer = [CALayer new];
myLayer.delegate = self;
self.layer = myLayer;
}
}
- (void)drawLayer:(CALayer *)layer inContext:(CGContextRef)ctx
{
// draw your path here
}
当您需要重新绘制时,请不要忘记致电[self.layer setNeedsDisplay];
。