nac*_*o4d 4 iphone macos cocoa cocoa-touch core-animation
我有一个带有一个子层B的CALayer A我希望A调整大小(缩小)所以我将动画添加到我的A层但是当我提交动画时子层B没有缩小.它的大小仍然存在(但它的位置会随着其超级层边界的变化而变化)如何使我的B层与A动画一起调整大小?
这就是我写的:
CABasicAnimation *fadeInAnimation;
fadeInAnimation=[CABasicAnimation animationWithKeyPath:@"opacity"];
fadeInAnimation.repeatCount = 1;
fadeInAnimation.autoreverses = NO;
fadeInAnimation.fromValue = [NSNumber numberWithFloat:1.0];
fadeInAnimation.toValue = [NSNumber numberWithFloat:0.0];
CABasicAnimation *shrinkAnimation;
shrinkAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
shrinkAnimation.repeatCount = 1;
shrinkAnimation.autoreverses = NO;
shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
shrinkAnimation.toValue = [NSValue valueWithCGSize:CGSizeMake(0, 0)];
aniGroupOFF = [[CAAnimationGroup animation] retain];
aniGroupOFF.delegate = self;
aniGroupOFF.duration = ANI_DURATION;
aniGroupOFF.animations = [NSArray arrayWithObjects:shrinkAnimation, fadeInAnimation, nil];
Run Code Online (Sandbox Code Playgroud)
提交:
[self addAnimation:aniGroupOFF forKey:@"shrinkAndFade"];
self.opacity = 0.0;
Run Code Online (Sandbox Code Playgroud)
回答:
CABasicAnimation *shrinkAnimation;
shrinkAnimation = [CABasicAnimation animationWithKeyPath:@"transform"]; //use transform instead of bounds.size
shrinkAnimation.repeatCount = 1;
shrinkAnimation.autoreverses = NO;
shrinkAnimation.timingFunction = [CAMediaTimingFunction functionWithName:kCAMediaTimingFunctionEaseIn];
shrinkAnimation.toValue = [NSValue valueWithCATransform3D:CATransform3DScale(self.transform, 0.1, 0.1, 1.0)];
aniGroupOFF = [[CAAnimationGroup animation] retain];
aniGroupOFF.delegate = self;
aniGroupOFF.duration = ANI_DURATION;
aniGroupOFF.animations = [NSArray arrayWithObjects:shrinkAnimation, nil];
Run Code Online (Sandbox Code Playgroud)
实现此目的的最简单方法是为keyPath"transform.scale"设置动画,而不是"bounds.size".
如果坚持使用"bounds.size",则需要在A layoutSublayers层或layoutSublayersOfLayer:(CALayer*)aLayerA的委托上实现,并在该实现中手动调整B的大小.
| 归档时间: |
|
| 查看次数: |
6580 次 |
| 最近记录: |