2011-12-01 82 views
0

我试图在基于“视图A”子视图中心的UIView中绘制垂直线(称为视图A)。在基于动画CGPoint的UIView中绘制一条线。

子视图动画效果不错,但是,线条画不是动画效果。它碰到了最后的位置。

例如,如果subview在CGPoint(0,100),我想动画到CGPoint(100,100)。 子视图按预期方式移动,但是,线条绘制不会仅在整个动画中出现在CGPoint(100,100)处。

当然动画块内部我打电话[自setNeedsDisplay]

我使用如下所述的代码(pointView是上面提到的子视图):在drawRect方法

CGPointView newCetner = CGPointMake(100,100); 
[UIView animateWithDuration:.5 animations:^{     
pointView.center = newCenter; 
[self setNeedsDisplay]; 
}]; 

我有以下代码:

CGPathMoveToPoint(path, NULL, CGRectGetMidX(pointView.frame), pointView.center.y-100);  
CGPathAddLineToPoint(path, NULL, CGRectGetMidX(pointView.frame), pointView.center.y+100);  
CGContextAddPath(context, path); 
CGContextStrokePath(context);  

任何想法如何强制视图根据动画块重绘?

回答

0

默认情况下,动画通过存储视图的开始和最终版本,并应用一些便宜的转换从一个移动到另一个来工作。视图的中间版本不是用drawRect:绘制的。

您可以请求drawRect:通过将选项UIViewAnimationOptionAllowAnimatedContent传递给animateWithDuration:delay:options:animations:completion:来调用中间步骤。使用此选项时请确保drawRect:速度很快,因为它会经常被调用。

+2

你的解释很清楚,但是当我尝试将UIViewAnimationOptionAllowAnimatedContent传递给animateWithDuration时:delay:options:animations:completion:我继续获得相同的效果。它没有绘制中间步骤。 – user336994

+0

放入一个断点并确保正在按照预期调用'drawRect:'。检查你的“frame”和“center”值,看看它们是否按预期迭代。顺便说一句,你不应该需要调用'setNeedsDisplay'。 –