Нарисуй путь - iPhone - PullRequest
       15

Нарисуй путь - iPhone

1 голос
/ 26 августа 2011

Я анимирую объект вдоль пути на iPhone.Код прекрасно работает, используя CAKeyframeAnimation.В целях отладки я хотел бы нарисовать линию на экране.Я не могу сделать это, используя текущий CGContextRef.Везде, где я смотрю, написано, что вам нужно создать подкласс UIView, а затем переопределить метод drawRect для рисования на экране.Есть ли что-нибудь вокруг этого?Если нет, то как мне передать данные в метод drawRect, чтобы он знал, что рисовать?

РЕДАКТИРОВАТЬ: ОК.В итоге я создал подкласс UIView и реализовал рисование в методе drawRect.Я могу заставить его рисовать на экране, создав другой метод в подклассовом представлении (называемый drawPath), который устанавливает переменную экземпляра, а затем вызывает setNeedsDisplay.Это, в свою очередь, запускает метод drawRect, который использует переменную экземпляра для рисования на экране.Это лучшая практика?Что произойдет, если я хочу нарисовать более 20 путей.Мне не нужно создавать свойства для всех этих.

Ответы [ 2 ]

6 голосов
/ 26 августа 2011

В вашем методе drawRect UIView поместите некоторый код, подобный этому

    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);
0 голосов
/ 26 августа 2011

Если вы хотите использовать базовую графику, используйте 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];, когда вам нужно перерисовать его.

...