iOS:如何在两个移动对象之间画一条线?

时间:2013-03-11 04:43:01

标签: iphone ios animation drawing drawrect

我基本上有一个屏幕上的UIView对象数组。它们被随机移动,我希望有一条线连接每个对象。

在包含所有移动对象的UIView的drawRect方法中,我在它们之间绘制线条。然后,一旦完成,将为每个对象调用以下方法

-(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];

任何团体都有任何想法?

1 个答案:

答案 0 :(得分: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);
}