画一条路 - iPhone

时间:2011-08-26 04:24:37

标签: iphone objective-c xcode cgcontext cakeyframeanimation

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

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

2 个答案:

答案 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];