2

基本的に、画面上にある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];}];

}

基本的に、オブジェクトが移動しても、線はオブジェクトにアタッチされたままになります。[selfsetNeedsDisplay]を呼び出すことができれば; フレームがまったく変更されるたびに、drawRectメソッドは線を再描画しますが、これを実現する方法がわかりません。

フレームの変更(以下に表示)にオブザーバーを設定しようとしましたが、アニメーションが終了したときにのみトリガーされ、オブジェクトがアニメーションの途中であるため、フレームの変更をキャッチしません。

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

どんな体もアイデアを持っていますか?

4

1 に答える 1

0

すべての移動ビューを 1 つの配列内に配置する

[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);
}
于 2013-03-11T05:12:32.317 に答える