Как использовать CABasicAnimation / CAAnimationGroup с двумя анимациями - PullRequest
0 голосов
/ 24 мая 2019

Я использую две CABasicAnimation вместе, но что-то не так с анимацией вращения. Анимация вращения не работает нормально, это просто круг два много раз. Спасибо

Я использую CAAnimationGroup, чтобы заставить две CABasicAnimation работать вместе, но не работает

if (CGRectContainsPoint(deleteButton_hidden.bounds, locationInView)) {
        [deleteButton setImage:SSZImage(@"ic_feeds_deleteSticker_active") forState:UIControlStateNormal];
        deleteButton.layer.borderWidth = 1.5;//2;
        deleteButton.layer.borderColor = RGBHex(@"FF424F").CGColor;
        deleteButton.backgroundColor = RGBAHex(@"#FFFFFF", 0.5);

        //1.
        self.jumpOutAnimationEnabled = YES;
        if (!self.jumpInAnimationEnabled) {return;}
        self.jumpInAnimationEnabled = NO;
        //
        [deleteButton.layer addAnimation:[self deleteAnimation:YES duration:0.3] forKey:@"deleteBiggerAnimation"];
        [textStickerView.layer addAnimation:[self stickerAnimation:NO duration:0.3 stickerView:textStickerView] forKey:@"stickSmallerAnimation"];
        [UIView animateWithDuration:0.3 animations:^{
            textStickerView.layer.position = deleteButton.center;
        }];
    } else {
        [deleteButton setImage:SSZImage(@"ic_feeds_delete") forState:UIControlStateNormal];
        deleteButton.layer.borderWidth = 1;
        deleteButton.layer.borderColor = [UIColor whiteColor].CGColor;
        deleteButton.backgroundColor = RGBAHex(@"#000000", 0.26);

        //2.
        self.jumpInAnimationEnabled = YES;
        if (!self.jumpOutAnimationEnabled) {return;}
        self.jumpOutAnimationEnabled = NO;
        //
        [deleteButton.layer addAnimation:[self deleteAnimation:NO duration:0.3] forKey:@"deleteSmallerAnimation"];
        [textStickerView.layer addAnimation:[self stickerAnimation:YES duration:0.3 stickerView:textStickerView] forKey:@"stickBiggerAnimation"];
    }


- (CAAnimationGroup *)stickerAnimation:(BOOL)stickerViewBigger duration:(CFTimeInterval)duration stickerView:(SSZFBaseStickerView *)stickerView {
    //animation 1
    CABasicAnimation *stickAnimation1 = [CABasicAnimation animationWithKeyPath:@"transform"];
    stickAnimation1.duration = duration;
    stickAnimation1.fillMode = kCAFillModeForwards;
    stickAnimation1.removedOnCompletion = NO;
    if (stickerViewBigger) {
        stickAnimation1.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(stickerView.scale, stickerView.scale, 1)];
    }else {
        stickAnimation1.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.01, 0.01, 1)];
    }

    //animation 2
    CABasicAnimation *stickAnimation2 = [CABasicAnimation animationWithKeyPath:@"transform.rotation"];
    stickAnimation2.duration = duration;
    stickAnimation2.fillMode = kCAFillModeForwards;
    stickAnimation2.removedOnCompletion = NO;
    if (stickerViewBigger) {
        stickAnimation2.toValue = @(stickerView.rotate * M_PI/180);
    }else {
        stickAnimation2.toValue = @(0);
    }

    //CAAnimationGroup
    CAAnimationGroup *group = [CAAnimationGroup animation];
    group.duration = duration;
    group.fillMode = kCAFillModeForwards;
    group.removedOnCompletion = NO;
    group.animations = @[stickAnimation1, stickAnimation2];
    return group;
}

Вот видео, которое я записываю. Спасибо https://vimeo.com/user98903552/review/338263005/79fbaa955d

...