【问题标题】:What's the best way to animate (simple shapes) in response to touches?响应触摸的动画(简单形状)的最佳方式是什么?
【发布时间】:2011-12-06 12:35:21
【问题描述】:

我有一个自定义的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 */
}

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 我正在实施它,我会尽快报告。关于如何轻松跟踪touchesBegantouchesMoved...中的哪个触摸的任何建议?谢谢
    • 对象实例保持不变,因此您可以键入地址。见这里:developer.apple.com/library/ios/#documentation/EventHandling/…
    • 太棒了!我现在正在尝试实施您的建议,但我想我需要先阅读一下才能了解动画的工作原理。
    • 关于哲学的问题...动画通常是在动画 UIView 之外处理的吗?它们通常是否涉及整个 UIView 的属性(alpha、大小等),而不是 UIView 特定部分的属性(例如元素之一的颜色)?谢谢
    • 您可以为任何视图或其子视图的许多属性设置动画。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 2012-01-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多