2013-05-21 4 views
0

В настоящее время я разрабатываю приложение для iOS. В приложении у меня есть блоки (UIView), падающие с верхней части экрана с использованием uiview animatewithduration. Я ищу, чтобы они экспоненциально становились быстрее, когда они падали. Есть ли способ сделать это, используя animatewithduration или есть другой способ, которым вы попытаетесь добиться такого же эффекта?animatewithduration экспоненциально ускоряется

+0

Если ни одна из встроенных функций синхронизации не соответствует вашим требованиям, создайте CAKeyFrameAnimation с вашим пользовательским временем. – Till

ответ

0

Вы можете увеличить свою продолжительность с помощью переменной в блоке завершения и вызвать анимацию. Это был бы простой, но эффективный способ сделать то, что вы просите.

[UIView animateWithDuration:someVariable animations:^{ 

// Animation 

} 
completion:^ (BOOL finished) 
{ 
    if (finished) { 
     // Increment your someVariable here 
     // Then just call this holding method again 
    } 
}]; 
+0

, но я просто добавлю 100 анимаций один в начало следующего – BDGapps

+0

Возможно, эмиттер частиц? https://developer.apple.com/library/mac/#documentation/GraphicsImaging/Reference/CAEmitterLayer_class/Reference/Reference.html –

+0

Если вы становитесь очень сложным, я бы просто рекомендовал Cocos2d, поскольку он разработан именно для этих типов вещей и позволяет значительно увеличить функциональность с оптимизированной производительностью. –

0

Вы можете использовать CAAnimations с пользовательскими функциями синхронизации для этого. Небольшой пример:

CAMediaTimingFunction *timing = [[CAMediaTimingFunction alloc] initWithControlPoints:1 :0.1 :1 :0.9]; 
CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.translation.y"]; 
anim.timingFunction = timing; 
anim.duration = 0.4; 
anim.toValue = [NSNumber numberWithFloat:480]; 
[view.layer addAnimation:anim forKey:nil]; 
+0

замечательный может у, пожалуйста, объясните, что это initWithControlPoints: 1: 0.1: 1: 0.9]; спасибо – BDGapps

+0

это контрольные точки кубической [безьекур] (https://en.wikipedia.org/wiki/Bézier_curve). Вы можете играть с паараметрами с помощью этого приятного [онлайн-инструмента] (http://cubic-bezier.com), чтобы получить требуемую кривую. –

+0

работает, однако, когда скорость меньше, чем около 20 секунд, она скачет и не является плавным действием – BDGapps

Смежные вопросы