代码之家  ›  专栏  ›  技术社区  ›  Mark Adams

UIImageView在初始化后正在消失

  •  4
  • Mark Adams  · 技术社区  · 14 年前

    我正在UIView的一个类别中尝试这段代码(在这里的答案中找到),并使用它在UITableViewCell中嵌套的UIImageView上生成一个“pop”动画。

    - (void)attachPopUpAnimation
    {
        CAKeyframeAnimation *animation = [CAKeyframeAnimation
           animationWithKeyPath:@"transform"];
    
        CATransform3D scale1 = CATransform3DMakeScale(0.5, 0.5, 1);
        CATransform3D scale2 = CATransform3DMakeScale(1.2, 1.2, 1);
        CATransform3D scale3 = CATransform3DMakeScale(0.9, 0.9, 1);
        CATransform3D scale4 = CATransform3DMakeScale(1.0, 1.0, 1);
    
        NSArray *frameValues = [NSArray arrayWithObjects:
           [NSValue valueWithCATransform3D:scale1],
           [NSValue valueWithCATransform3D:scale2],
           [NSValue valueWithCATransform3D:scale3],
           [NSValue valueWithCATransform3D:scale4],
           nil];
        [animation setValues:frameValues];
    
        NSArray *frameTimes = [NSArray arrayWithObjects:
             [NSNumber numberWithFloat:0.0],
             [NSNumber numberWithFloat:0.5],
             [NSNumber numberWithFloat:0.9],
             [NSNumber numberWithFloat:1.0],
             nil];    
        [animation setKeyTimes:frameTimes];
    
        animation.fillMode = kCAFillModeForwards;
        animation.removedOnCompletion = NO;
        animation.duration = 0.2;
    
        [self.layer addAnimation:animation forKey:@"popup"];
    }
    

    动画可以正常工作,但当它完成时,它会消失。我已经找到了这个问题的答案,但显然设置fillMode在这种情况下不起作用。

    1 回复  |  直到 14 年前
        1
  •  11
  •   Matt Long    9 年前

    别用那两条线。而是在图层上设置变换。替换这两条线:

    animation.fillMode = kCAFillModeForwards;
    animation.removedOnCompletion = NO;
    

    使用最终变换状态:

    [[self layer] setTransform:scale4];
    

    仅可视 转型 将动画添加到层时的名称。这将导致动画使用您的动画而不是默认动画。

    [[self layer] addAnimation:animation forKey:@"transform"];