动画(简单形状)动画的最佳方法是什么?

时间:2011-12-06 12:35:22

标签: objective-c ios uiview core-animation core-graphics

我有一个自定义UIView,我希望在其中显示简单的动画形状以响应触摸。例如:

  • 每当用户点击屏幕时,会出现一个圆圈,手指下有动画
  • 如果用户结束触摸圆圈应该会以动画消失
  • 如果用户到达屏幕的某个部分,则圆圈应该增大(平滑)

我现在正在做的事情(参见下面的代码)是使用touchesBegantouchesMoved等来设置一个包含所有触摸的集合。然后在drawRect中为每个触摸画一个圆圈。一切都是超静态的。

动画制作的最佳方式是什么?

谢谢!

PS:完整性在这里是我的代码的一部分

- (void)drawRect:(CGRect)rect
{
    for (UITouch *touch in ts) { //ts is the set with all touches
        CGPoint location = [touch locationInView:touch.view];
        CGContextRef context = UIGraphicsGetCurrentContext();

        CGRect rectangle = CGRectMake(location.x-circleSize/2, location.y-circleSize/2+correctionY,
                                          circleSize*1.15, circleSize*1.15);
        CGContextAddRect(context, rectangle);
        CGContextSetFillColorWithColor(context, [UIColor redColor].CGColor);
        CGContextFillEllipseInRect(context, rectangle);
        /* etc etc */
    }
}


-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event
{ 
    /* etc etc */
    ts = [[NSMutableSet setWithSet: [event touchesForView:self]] retain];
    /* etc etc */
}

1 个答案:

答案 0 :(得分:1)

我不会在主视图中使用drawRect,而是为每个对象创建一个新的子视图。这些子视图可以是UIImageViews,也可以是标准的UIViews,然后通过子类化子视图的drawRect继续绘制。

然后,使用UIView的动画方法设置这些子视图的动画是微不足道的:

[UIView animateWithDuration:0.3
                 animations:^(void) {
                     // Do something to the view...
                 }];

显然,您需要添加代码来管理触摸并在需要时删除子视图,但这不应该太繁琐。