动画 calayers 不断跟随手指位置
Posted
技术标签:
【中文标题】动画 calayers 不断跟随手指位置【英文标题】:Animating calayers follow finger location constantly 【发布时间】:2012-07-27 04:39:52 【问题描述】:我有一个 UIView 包含许多 UILabel。现在我长按其中一个标签,然后其他标签会飞到按下的标签上,其他标签会不断跟随我的手指位置。
我的问题是
-
如何使用核心动画执行此任务?
在我的解决方案中,当标签数大于 20 时,动画非常缓慢。为什么?
-(void)viewDidLoad
[super viewDidLoad];
_longGesture = [[UILongPressGestureRecognizer alloc] initWithTarget:self action:@selector(longPressGestureUpdated:)];
_longGesture.numberOfTouchesRequired = 1;
[[self dragView] addGestureRecognizer:_longGesture];
- (void)longPressGestureUpdated:(UILongPressGestureRecognizer *)longPressGesture
switch (longPressGesture.state)
case UIGestureRecognizerStateBegan:
location = [longPressGesture locationInView:self.view];
[self startAllLayersAnimation];
break;
case UIGestureRecognizerStateChanged:
case UIGestureRecognizerStateEnded:
location = [longPressGesture locationInView:self.view];
[self startAllLayersAnimation];
break;
default:
break;
- (void)startAllLayersAnimation
[CATransaction begin];
for (CALayer *layer in [self labelLayers])
[self startAnimation:layer];
[CATransaction commit];
- (void)startAnimation:(CALayer*)layer
CGPoint now =((CALayer*)layer.presentationLayer).position;
CABasicAnimation * cab = [CABasicAnimation animationWithKeyPath:@"position"];
cab.delegate = self;
cab.removedOnCompletion = NO;
cab.fillMode = kCAFillModeForwards;
cab.fromValue = [NSValue valueWithCGPoint:now];
cab.toValue = [NSValue valueWithCGPoint:location];
cab.duration = 1;
//cab.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseOut];
[layer addAnimation:cab forKey:@"revItUpAnimation"];
我的解决方案对吗?能告诉我如何更合适地执行此方法吗?
【问题讨论】:
您发布的代码已经使用了 Core Animation。您的动画持续时间为 1 秒,并且可以轻松计时。 1 秒是一个相当慢的动画。什么是迟缓,最初的动画或随后的手指跟随动画?你还没有展示你的那部分代码。 【参考方案1】:尝试使用UITouch
,而不是使用手势。这将有所帮助,因为 touchesBegan
和 touchesMoved
的 2 个事件将包括您的 CABasicAnimation
方法。
【讨论】:
touchesMoved 会触发很多 startAnimations 被调用,我想什么都不会改变。你能详细解释一下吗以上是关于动画 calayers 不断跟随手指位置的主要内容,如果未能解决你的问题,请参考以下文章