0

我正在尝试让 AM/PM 通道淡入淡出,但我似乎无法让它双向工作。

如果我只使用一个它可以工作,但是当我尝试添加两个时,它只是来回翻转而没有正确的淡入淡出动画。

谁能给我一些关于为什么以及如何解决这个问题的见解?

下面是我的代码。

- (void)setState:(MonringNightLabelState)state animated:(BOOL)animated {

    CATransition *animationAM = [CATransition animation];
    animationAM.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    animationAM.type = kCATransitionFade;
    animationAM.duration = 0.3;

    CATransition *animationPM = [CATransition animation];
    animationPM.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
    animationPM.type = kCATransitionFade;
    animationPM.duration = 0.3;

    if (animated)
    {
        [UIView animateWithDuration:0.3
                              delay:0.0
                            options:UIViewAnimationOptionBeginFromCurrentState
                         animations:^{
                             [self setState:state animated:NO];
                         }
                         completion:^(BOOL finished) {

                         }];
    }

    switch (state)
    {
        case MorningNightLabelStateAM:
        {
            [self.morningNightLabel.layer addAnimation:animationAM forKey:@"kCATransitionFade"];

            self.morningNightLabel.text = @"AM";

        }
            break;
        case MorningNightLabelStatePM:
        {
            [self.morningNightLabel.layer addAnimation:animationPM forKey:@"kCATransitionFade"];

            self.morningNightLabel.text = @"PM";
        }
            break;
    }
}
4

1 回答 1

0

这是我快速修复它的方式:

var transitionAnimation = CATransition()
transitionAnimation.type = kCATransitionFade
transitionAnimation.duration = 0.2
transitionAnimation.timingFunction = CAMediaTimingFunction(name: kCAMediaTimingFunctionLinear)
transitionAnimation.fillMode = kCAFillModeBoth
self.titleLabel.layer.addAnimation(transitionAnimation, forKey: "fadeAnimation")
self.titleLabel.text = newTitle

这对我有用。

可能这应该足够了:

CATransition *animationPM = [CATransition animation];
animationPM.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseInEaseOut];
animationPM.type = kCATransitionFade;
animationPM.duration = 0.3;
[self.morningNightLabel.layer addAnimation:animationAM forKey:@"kCATransitionFade"];
self.morningNightLabel.text = (state == MorningNightLabelStateAM) ? @"AM" : @"PM";
于 2014-12-03T09:38:28.420 回答