ios - 隐式属性动画不适用于CAReplicatorLayer吗?

标签 ios macos core-animation

示例代码是here

用显式属性动画替换显式属性动画后,动画将被破坏。

显式动画:

-(void)animate:(id)sender {
    ...
    //Transform Animation
    animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.fromValue = [NSValue valueWithCATransform3D: CATransform3DIdentity];
    animation.toValue = [NSValue valueWithCATransform3D: t];
    animation.duration = 1.0;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeBoth;
    [subLayer addAnimation:animation forKey:@"transform"];

    //Opacity Animation
    animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.fromValue = [NSNumber numberWithFloat:1.0];
    animation.toValue = [NSNumber numberWithFloat:0.0];
    animation.duration = 1.0;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeBoth;
    [subLayer addAnimation:animation forKey:@"opacity"];
    ...
}

-(void)reset:(id)sender {       
    ...
    //Transform Animation
    animation = [CABasicAnimation animationWithKeyPath:@"transform"];
    animation.fromValue = [NSValue valueWithCATransform3D: t];
    animation.toValue = [NSValue valueWithCATransform3D: CATransform3DIdentity];
    animation.duration = 1.0;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeBoth;
    [subLayer addAnimation:animation forKey:@"transform"];

    //Opacity Animation
    animation = [CABasicAnimation animationWithKeyPath:@"opacity"];
    animation.fromValue = [NSNumber numberWithFloat:0.0];
    animation.toValue = [NSNumber numberWithFloat:1.0];
    animation.duration = 1.0;
    animation.removedOnCompletion = NO;
    animation.fillMode = kCAFillModeBoth;
    [subLayer addAnimation:animation forKey:@"opacity"];

    ...
}

隐式动画:
-(void)animate:(id)sender {
    ...
    //Transform Animation
    [CATransaction setAnimationDuration:1];
    subLayer.transform = t;

    //Opacity Animation
    [CATransaction setAnimationDuration:1];
    subLayer.opacity = 0;
    ...
}

-(void)reset:(id)sender {       
    ...
    //Transform Animation
    [CATransaction setAnimationDuration:1];
    subLayer.transform = CATransform3DIdentity;

    //Opacity Animation
    [CATransaction setAnimationDuration:1];
    subLayer.opacity = 1;       
    ...
}

为什么?

最佳答案

您在使用隐式动画时不需要使用CATransaction。
小心uikit禁用图层的隐式动画,该图层是UIView的根层

关于ios - 隐式属性动画不适用于CAReplicatorLayer吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6511504/

相关文章:

ios - 在 ELCImagepicker 中显示视频和图像

objective-c - 以编程方式在另一个桌面(空间)中打开 NSWindow

.net - IIS 和 .NET 与 Mac 上的 Docker

ios - 非动画 UI 元素的手动动画

ios - 旋转时如何中断/停止动画?

ios - Swift 中的自定义相机和裁剪图像

ios - AFNetworking+UIImageView 中的缓存不遵守任何 http 缓存策略? (希望我错了)

ios - 在 iPhone 的设置菜单中启用开发人员项目

GitLab SSH 权限被拒绝(公钥)

swift - 动画简单容器 View 时的问题