1

CATextlayer に追加しようとしている一連のアニメーションがあります。数秒後にレイヤーが消える不透明アニメーションと、レイヤーが訪問中に少し揺れる「揺れ」アニメーション。不透明度のアニメーションは問題なく機能します。揺れても何も起こらない-その理由を解明できればと思っていた.

レイヤーと不透明度アニメーションのコードは次のとおりです。これは正常に機能します。

    CATextLayer *subtitle1Text = [[CATextLayer alloc] init];
    [subtitle1Text setFont:@"Helvetica-Bold"];
    [subtitle1Text setFontSize:25];
    [subtitle1Text setFrame:CGRectMake(0, 0, self.screenSize.width, 100)];
    [subtitle1Text setString: self.videoDescription1.text ];
    [subtitle1Text setAlignmentMode:kCAAlignmentCenter];
    [subtitle1Text setForegroundColor:[[UIColor whiteColor] CGColor]];

    CABasicAnimation *animation1 =[CABasicAnimation animationWithKeyPath:@"opacity"];
    animation1.duration= 0 ;
    animation1.fromValue=[NSNumber numberWithFloat:1.0];
    animation1.toValue=[NSNumber numberWithFloat:0.0];
    animation1.beginTime = 3;
    animation1.removedOnCompletion = NO;
    animation1.fillMode = kCAFillModeBoth;
    animation1.additive = NO;
    animation1.autoreverses = NO;

これが私の揺れるアニメーションで、何もしません:

    CAKeyframeAnimation * shakeAnim = [ CAKeyframeAnimation animationWithKeyPath:@"transform" ] ;
    shakeAnim.values = @[ [ NSValue valueWithCATransform3D:CATransform3DMakeTranslation(-10.0f, 0.0f, 0.0f) ], [ NSValue valueWithCATransform3D:CATransform3DMakeTranslation(10.0f, 0.0f, 0.0f) ] ] ;
    shakeAnim.autoreverses = YES ;
    shakeAnim.repeatCount = 2.0f ;
    shakeAnim.duration = 0.07f ;
    shakeAnim.beginTime = 0;
    shakeAnim.fillMode = kCAFillModeBoth;

ここでアニメーションを追加します:

    CALayer *overlayLayer1 = [CALayer layer];
    [overlayLayer1 addSublayer:subtitle1Text];
    overlayLayer1.frame = CGRectMake(0, 0,
                                    self.screenSize.width, self.screenSize.height);
    [overlayLayer1 setMasksToBounds:YES];
    [overlayLayer1 addAnimation:shakeAnim forKey:@"transform" ] ;
    [overlayLayer1 addAnimation:animation1 forKey:@"opacityOUT"];

    CALayer *parentLayer = [CALayer layer];
    CALayer *videoLayer = [CALayer layer];
    parentLayer.frame = CGRectMake(0, 0, self.screenSize.width, self.screenSize.height);
    videoLayer.frame = CGRectMake(0, 0, self.screenSize.width, self.screenSize.height);
    [parentLayer addSublayer:videoLayer];
    [parentLayer addSublayer:overlayLayer1];

揺れがうまくいかない理由について何か考えていただければ幸いです。

4

0 に答える 0