响应触摸的动画(简单形状)的最佳方式是啥?
Posted
技术标签:
【中文标题】响应触摸的动画(简单形状)的最佳方式是啥?【英文标题】:What's the best way to animate (simple shapes) in response to touches?响应触摸的动画(简单形状)的最佳方式是什么? 【发布时间】:2011-12-06 12:35:21 【问题描述】:我有一个自定义的UIView
,我想在其上显示简单的动画形状以响应触摸。例如:
我现在正在做的(见下面的代码)是使用touchesBegan
、touchesMoved
等来设置一个包含所有触摸的集合。然后在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...
];
显然,您需要添加代码来管理触摸并在需要时删除子视图,但这不应该太繁重。
【讨论】:
我正在实施它,我会尽快报告。关于如何轻松跟踪touchesBegan
、touchesMoved
...中的哪个触摸的任何建议?谢谢
对象实例保持不变,因此您可以键入地址。见这里:developer.apple.com/library/ios/#documentation/EventHandling/…
太棒了!我现在正在尝试实施您的建议,但我想我需要先阅读一下才能了解动画的工作原理。
关于哲学的问题...动画通常是在动画 UIView 之外处理的吗?它们通常是否涉及整个 UIView 的属性(alpha、大小等),而不是 UIView 特定部分的属性(例如元素之一的颜色)?谢谢
您可以为任何视图或其子视图的许多属性设置动画。以上是关于响应触摸的动画(简单形状)的最佳方式是啥?的主要内容,如果未能解决你的问题,请参考以下文章