2013-03-11 2 views
2

У меня в основном есть массив объектов UIView, которые находятся на экране. Они перемещаются случайным образом вокруг, и я хотел бы иметь линию, соединяющую каждый объект.iOS: Как нарисовать линию между двумя движущимися объектами?

В моем методе drawRect UIView, который содержит все движущиеся объекты, я рисую линии между ними. Тогда, как только это будет сделано ниже метод вызывается для каждого объекта

-(void)animateIcon:(Icon*)icon{ 
[UIView animateWithDuration:(arc4random() % 100 * 0.1) 
         delay: 0.0 
        options: UIViewAnimationOptionCurveEaseIn 
       animations:^{ 
        icon.frame = CGRectMake((arc4random() % 320), (arc4random() % ((int)self.frame.size.height - 70)), 52, 52); 
       } 
       completion:^(BOOL finished){[self animateIcon:icon];}]; 

}

По существу я хотел линии оставаться прикреплены к объектам, как они двигаются. Если бы я мог называть [self setNeedsDisplay]; каждый раз, когда кадр вообще менялся, метод drawRect будет перерисовывать линии, но я не могу понять, как это сделать.

Я попытался установить наблюдатель на изменении кадра (как показано ниже), но это только получает срабатывает, как только анимация закончится, и не улавливает изменения кадров как объект середины анимации

[icon addObserver:self forKeyPath:@"frame" options:NSKeyValueObservingOptionOld context:NULL]; 

любой орган получил какие-то идеи?

ответ

0

Помещенный все движущиеся виды внутри одного массива

[UIView setAnimationDidStopSelector:@selector(animationStopped:isFinished:context:)]; 


- (void)animationStopped:(NSString*)animationID isFinished:(BOOL)finished context:(void *)context 
{ 
    context = UIGraphicsGetCurrentContext() ; 
    CGContextSaveGState(context); 
    CGContextSetStrokeColorWithColor(context,[UIColor blueColor].CGColor); 
    CGContextSetLineWidth(myContext, 5.0); 
    CGMutablePathRef myPathRef = CGPathCreateMutable() ; 
    for (int ind = 0 ; ind < [movingViewArray count] ; ind++) 
     { 
      UIView *tmpView=[movingViewArray objectAtIndex:ind]; 
      CGPoint point=tmpView.frame.center; 
     if(ind==0) CGPathMoveToPoint(myPathRef, nil, point.x, point.y); 
      else { 
       CGPathAddLineToPoint(myPathRef, nil, point.x, point.y); 
       CGPathMoveToPoint(myPathRef, nil, point.x, point.y); 
       } 
     } 

     CGContextAddPath(context, myPathRef) ; 

     CGPathRelease(myPathRef); 

     CGContextDrawPath(context,kCGPathStroke); 
     CGContextClip(context); 
} 
Смежные вопросы