1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/3Liang-AXAnimationChain

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Цепочка анимаций 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 и предков, анимация будет выполняться последовательно, объединённые анимации будут выполняться одновременно.

Features

  • Лёгкое решение
  • Безопасная и эффективная оболочка на основе CoreAnimation!
  • Управление сложной анимацией с помощью одной строки кода, что повышает эффективность обслуживания кода.

TimingControl

Кривая времени, кривая времени используется для описания скорости анимации во времени. Помимо системной кривой по умолчанию, AXAnimationChain предоставляет следующие кривые для более красивой анимации:

http://ww1.sinaimg.cn/large/d2297bd2gw1fbmrilba19j21c610047c.jpg

AXSpringAnimation

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:

SpringSample

Анимация показывает, что левая квадратная анимация использует класс 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 )

Вы можете оставить комментарий после Вход в систему

Введение

AXAnimationChain — это библиотека для создания цепочек анимаций, которая позволяет легко создавать цепочки анимаций на основе CAAnimation. Кодовая база редко обновляется, перейдите на GitHub! Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/3Liang-AXAnimationChain.git
git@api.gitlife.ru:oschina-mirror/3Liang-AXAnimationChain.git
oschina-mirror
3Liang-AXAnimationChain
3Liang-AXAnimationChain
master