响应触摸的动画(简单形状)的最佳方式是啥?

Posted

技术标签:

【中文标题】响应触摸的动画(简单形状)的最佳方式是啥?【英文标题】: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 */

【问题讨论】:

【参考方案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 特定部分的属性(例如元素之一的颜色)?谢谢 您可以为任何视图或其子视图的许多属性设置动画。

以上是关于响应触摸的动画(简单形状)的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章

在视图控制器演示动画期间响应触摸事件

动画后UITextView不响应触摸事件

动画移动 UIButton 在移动时不响应触摸/点击

在 UIView 中为多个形状设置动画

在Scroll View的高度动画后,UIScrollView的子视图不响应触摸

制作动画(flash)的最佳方法是啥