Цепочка анимаций AXAnimationChain: библиотека для создания сложных анимаций на основе CAAnimation
AXAnimationChain — это библиотека, которая позволяет легко создавать сложные анимации на основе CAAnimation. Цепочка анимаций может быть создана двумя способами: комбинированием и связыванием. Созданные таким образом анимации могут выполняться одновременно или последовательно, позволяя создавать разнообразные эффекты с помощью небольшого количества кода.
Простое использование:
_transitionView.spring.centerBy(CGPointMake(0, 100)).easeOut.spring.sizeBy(CGSizeMake(100, 100)).spring.cornerRadiusBy(4).animate();
Сложное использование:
_transitionView.chainAnimator.basic.target(self).complete(@selector(complete:)).property(@"position").toValue([NSValue valueWithCGPoint:CGPointMake(100, self.view.center.y)]).easeInBack.duration(0.5).combineSpring.target(self).complete(@selector(complete:)).property(@"bounds").toValue([NSValue valueWithCGRect:CGRectMake(0, 0, 100, 100)]).duration(0.5).repeatCount(5).autoreverses.combineSpring.target(self).complete(@selector(complete:)).property(@"transform.rotation").toValue(@(M_PI_4)).duration(0.5).repeatCount(3).beginTime(1.0).autoreverses.nextToBasic.property(@"position").toValue([NSValue valueWithCGPoint:self.view.center]).duration(0.5).combineSpring.property(@"bounds").toValue([NSValue valueWithCGRect:CGRectMake(0, 0, 100, 100)]).duration(0.8).nextToBasic.property(@"transform.rotation").toValue(@(M_PI_4)).duration(1.0).completeWithBlock(nil).animate();
В библиотеке определены несколько типов аниматоров: AXBasicChainAnimator, AXSpringChainAnimator, AXKeyframeChainAnimator и AXTransitionChainAnimator. Они основаны на CoreAnimation и представляют собой различные типы анимаций. AXChainAnimator является базовым классом, который определяет ряд операций анимации, включая связывание и комбинирование, а также управление завершением анимации.
Связывание и комбинирование определяются в протоколе AXAnimatorChainDelegate как nextTo: и combineWith:. Эти методы используются для управления порядком выполнения анимаций.
Next-To метод используется для связывания двух аниматоров. Первый аниматор будет выполнен полностью, после чего второй аниматор начнёт свою работу. Пример использования:
[former nextTo:nexter];
Метод Combine-With используется для комбинирования двух аниматоров, которые будут выполняться одновременно. Пример использования:
[former combineWith:combiner];
``` **Представленный текст является исходным текстом на английском языке.**
Текст описывает структуру и принципы работы класса `AXChainAnimator` в Objective-C, который используется для управления анимацией. Класс `AXChainAnimator` позволяет объединять несколько аниматоров в цепочку и управлять их выполнением.
В тексте также описывается использование класса `AXSpringAnimation`, который предоставляет возможность создавать анимацию с использованием модели пружинного движения. Это позволяет создавать более сложные и реалистичные анимации.
**Представленный код на языке Objective-C описывает метод запуска анимации.** В коде происходит проверка на наличие анимируемого представления, после чего выполняется поиск супер-аниматора (`superAnimator`) и его супер-супер-аниматора (`superSuperAnimator`). Если супер-супер-аниматор найден, то он запускается, иначе анимация начинается с текущего аниматора.
* * *
Отображение этого `animator` как связанного с `superAnimator` `animator`, в этот момент `superAnimator` его `childAnimator` указывает на этот `animator` в качестве замкнутого цикла, связывающего их обоих; аналогично, один `animator` также имеет указатель на `NSArray<AXChainAnimator *>` структуру: `combinedAnimators` для управления объединёнными `animators`, и объединённый `animator` родительский узел `superAnimator` указывает на текущий `animator`.
```objective-c
- (void)start {
NSAssert(_animatedView, @"Animation chain cannot be created because animated view is null.");
AXChainAnimator *superAnimator = _superAnimator;
AXChainAnimator *superSuperAnimator = _superAnimator;
while (superAnimator) {
superAnimator = superAnimator.superAnimator;
if (superAnimator) {
superSuperAnimator = superAnimator;
}
}
if (superSuperAnimator) {
[superSuperAnimator start];
} else {
[self _beginAnimating];
if (!_childAnimator) [self _clear];
}
}
AXAnimatioChain
— это способ управления всеми связанными и объединёнными аниматорами, после завершения связей или объединений необходимо отправить сообщение -start
последнему аниматору, чтобы анимация могла нормально выполняться. После получения сообщения -start
аниматор будет проходить по цепочке superAnimator
, пока superAnimator.superAnimator==nil
, затем получит superSuperAnimator
, начиная с superSuperAnimator
и предков, анимация будет выполняться последовательно, объединённые анимации будут выполняться одновременно.
Кривая времени, кривая времени используется для описания скорости анимации во времени. Помимо системной кривой по умолчанию, AXAnimationChain
предоставляет следующие кривые для более красивой анимации:
CoreAnimation поддерживает основные анимации для платформы iOS с iOS 2.0, но до iOS9.0 не было анимации Spring. Для использования анимации Spring нужно либо использовать сторонние библиотеки анимации, либо системные методы:
+ (void)animateWithDuration:(NSTimeInterval)duration delay:(NSTimeInterval)delay usingSpringWithDamping:(CGFloat)dampingRatio initialSpringVelocity:(CGFloat)velocity options:(UIViewAnimationOptions)options animations:(void (^)(void))animations completion:(void (^ __nullable)(BOOL finished))completion NS_AVAILABLE_IOS(7_0);
Однако этот системный метод можно использовать только с iOS7.0 и выше, и им нелегко управлять.
AXSpringAnimation
— это класс анимации Spring, основанный на модели демпфирования колебаний, который может идеально сочетаться с CASpringAnimation
:
Анимация показывает, что левая квадратная анимация использует класс CASpringAnimation
, а правая — AXSpringAnimation
, обе анимации имеют одинаковую кривую.
Точно так же API и AXSpringAnimation
CASpringAnimation
одинаковы:
@interface AXSpringAnimation : CAKeyframeAnimation
/* The mass of the object attached to the end of the spring. Must be greater
than 0. Defaults to one. */
@property(assign, nonatomic) CGFloat mass;
/* The spring stiffness coefficient. Must be greater than 0.
* Defaults to 100. */
@property(assign, nonatomic) CGFloat stiffness;
/* The damping coefficient. Must be greater than or equal to 0.
* Defaults to 10. */
@property(assign, nonatomic) CGFloat damping;
/* The initial velocity of the object attached to the spring. Defaults
* to zero, which represents an unmoving object. Negative values
* represent the object moving away from the spring attachment point,
* positive values represent the object moving towards the spring
* attachment point. */
@property(assign, nonatomic) CGFloat initialVelocity;
/* Returns the estimated duration required for the spring system to be
* considered at rest. The duration is evaluated for the current animation
* parameters. */
@property(readonly, nonatomic) CFTimeInterval settlingDuration;
/* The objects defining the property values being interpolated between.
* All are optional, and no more than two should be non-nil. The object
* type should match the type of the property being animated (using the
* standard rules described in CALayer.h). The supported modes of
* animation are:
*
* - both `fromValue' and `toValue' non-nil. Interpolates between
* `fromValue' and `toValue'.
*
* - `fromValue' and `byValue' non-nil. Interpolates between
* `fromValue' and `fromValue' plus `byValue'.
*
* - `byValue' and `toValue' non-nil. Interpolates between `toValue'
* minus `byValue' and `toValue'. */
@property(nullable, strong, nonatomic) id fromValue;
@property(nullable, strong, nonatomic) id toValue;
@property(nullable, strong,
Этот текст представляет собой описание технических аспектов разработки программного обеспечения, связанных с анимацией и управлением анимациями в приложениях.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Комментарии ( 0 )