1

我正在沿 iPhone 上的路径为对象设置动画。该代码使用CAKeyframeAnimation. 出于调试目的,我想在屏幕上画线。我似乎无法使用当前的CGContextRef. 我到处都说你需要子类化 UIView 然后覆盖 drawRect 方法以在屏幕上绘制。有没有办法解决?如果没有,我如何将数据传递给 drawRect 方法,以便它知道要绘制什么?

编辑:好的。我最终继承了 UIView 并在 drawRect 方法中实现了绘图。我可以通过在子类视图(称为 drawPath)中创建另一个方法来将其绘制到屏幕上,该方法设置一个实例变量,然后调用 setNeedsDisplay。这反过来会触发 drawRect 方法,该方法使用实例变量绘制到屏幕上。这是最佳做法吗?如果我想绘制 20 多条路径会发生什么。我不应该为所有这些创建属性。

4

2 回答 2

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);
于 2011-08-26T06:52:10.860 回答
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];需要重绘时不要忘记调用。

于 2011-08-26T04:56:24.703 回答