我基本上有一个屏幕上的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];
任何团体都有任何想法?
答案 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);
}