Синхронизировать все анимации в ячейках представления коллекции - PullRequest
0 голосов
/ 06 апреля 2020

Я работаю над проектом, в котором мне нужно анимировать определенный цвет фона ячейки представления коллекции в мигающее состояние. Я использую код ниже в моем подклассе collectionviewcell:

- (void) fadeInAnimation{

    if (!self.animationRunning) {
        if ([self canRunAnimation]) {
            typeof(self) __weak weakSelf = self;
            self.nameLabel.textColor = [UIColor blackColor];
            self.animationRunning = true;
            [UIView animateWithDuration:1.0
                                  delay:0.0
                                options: UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{

                self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:1.0];

            }
                             completion:^(BOOL finished) {
                [weakSelf fadeOutAnimation];
             }];
        }
        else {
            [self.layer removeAllAnimations];
            self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:1.0];
        }
    }
}

- (void) fadeOutAnimation {
    typeof(self) __weak weakSelf = self;
    [UIView animateWithDuration:1.0
                          delay:0.0
                        options:UIViewAnimationOptionCurveEaseIn | UIViewAnimationOptionAllowUserInteraction animations:^{

        self.backgroundColor = [self.backgroundColor colorWithAlphaComponent:0.65];

    }
                     completion:^(BOOL finished) {
        weakSelf.animationRunning = NO;
        [weakSelf fadeInAnimation];

     }];
}

Моя проблема в том, что, хотя этот код работает, я думаю, что он не очень эффективен и нуждается в очистке. Кроме того, мне нужно, чтобы все анимации, запущенные в настоящий момент, синхронизировались при перепрошивке, однако мой код заставляет ячейки исчезать и исчезать в разное время. У меня есть метод refre sh, который обновляет пользовательский интерфейс на основе результатов моего вызова API каждые несколько секунд. Есть идеи, как я могу синхронизировать запущенные в данный момент UIAnimations? Я надеюсь, что я был ясен в своем вопросе.

1 Ответ

0 голосов
/ 09 апреля 2020

Я исправил свою проблему, просматривая подпредставления моего представления и захватывая все ячейки коллекционного представления в своих нескольких подпредставлениях, и, получив их, я постепенно устанавливал цвет их фона с альфа-компонентом ... вот часть моего решения, вдохновленная ответом Арманда в этом вопрос: Анимация UITableViewCell backgroundcolor

- (void) animateCellFromView:(UIView*)subview {
    if ([subview isKindOfClass:[PageCollectionItemCell class]]) {
        PageCollectionItemCell *cell = (PageCollectionItemCell*)subview;
        if ([cell canRunAnimation]) {
            cell.backgroundColor = [cell.backgroundColor colorWithAlphaComponent:self.alpha];
        }
    }
}
...