Ios 同时执行多个CALayer动画
我正在尝试制作一个动画,其中两个层移动到一侧,缩小比例,并在3D中旋转一点,所有这些都是同时进行的(然后将之前位于底部而不是顶部的层向后移动)。我试过几种方法,但似乎都不管用 我有这样的3d变换动画:Ios 同时执行多个CALayer动画,ios,core-animation,calayer,Ios,Core Animation,Calayer,我正在尝试制作一个动画,其中两个层移动到一侧,缩小比例,并在3D中旋转一点,所有这些都是同时进行的(然后将之前位于底部而不是顶部的层向后移动)。我试过几种方法,但似乎都不管用 我有这样的3d变换动画: perspectiveTransformLeft = CATransform3DIdentity; perspectiveTransformLeft.m34 = 1.0 / 500; perspectiveTransformLeft = CATransform3DRotate(perspectiv
perspectiveTransformLeft = CATransform3DIdentity;
perspectiveTransformLeft.m34 = 1.0 / 500;
perspectiveTransformLeft = CATransform3DRotate(perspectiveTransformLeft, 35.0f * M_PI / 360.0f, 0.0f, 1.0f, 0.0f);
我尝试添加一个不起作用的缩放变换:
perspectiveTransformLeft = CATransform3DMakeScale(0.75, 0.75, 1);
我尝试在动画块中缩放层,但也不起作用:
[UIView animateWithDuration:1.0f
delay:0.0f
options: UIViewAnimationOptionCurveEaseInOut
animations:^{
endingLayer.frame = CGRectMake(20.0f, 0.0f, 724.0f, 538.0f);
switchViewBottom.layer.transform = perspectiveTransformRight;
}
completion:^(BOOL finished){
[delegate switchAnimationFinished];
}
];
我不知所措。有人能帮我吗?阅读一下CAanimation Group,然后改用CABASICANITIONS。
这会让你实现你的目标。如果您在实现它时遇到问题,我将在我的代码(我以前使用过它)中搜索一个示例 编辑:这里有一些代码
typedef void (^animationCompletionBlock)(void);
typedef void (^animationStartedBlock)(void);
- (void)addAnimations:(NSArray *)animations withDuration:(CGFloat)animationDuration onView:(UIView *)aView {
animationStartedBlock startBlock = ^void(void) {
// Additional Animation start code here
};
animationCompletionBlock endBlock = ^void(void) {
// Additional animation completed code here
};
CAAnimationGroup *group = [CAAnimationGroup animation];
group.fillMode = kCAFillModeForwards;
group.removedOnCompletion = NO;
group.duration = animationDuration;
[group setAnimations:animations];
group.delegate = self;
[group setValue:startBlock forKey:@"animationStartedBlock"];
[group setValue:endBlock forKey:@"animationCompletionBlock"];
[aView.layer addAnimation:group forKey:@"yourAnimationName"];
}
这将在代理中调用您的完成块
// Animation Delegate
- (void)animationDidStart:(CAAnimation *)anim {
animationStartedBlock animationStartedBlock = [anim valueForKey:@"animationStartedBlock"];
if (animationStartedBlock) {
animationStartedBlock();
}
}
- (void)animationDidStop:(CAAnimation *)theAnimation finished:(BOOL)flag {
animationCompletionBlock animationCompleteBlock = [theAnimation valueForKey:@"animationCompletionBlock"];
if (animationCompleteBlock) {
animationCompleteBlock();
}
}
如何创建动画并将其添加到数组以传递给此方法取决于您想要的动画
这是两个缩放/淡入动画的示例:
// Scale
- (CABasicAnimation *)scaleAnimationForImageView:(UIImageView *)imageView withDuration:(CGFloat)duration {
CGRect imageFrame = imageView.frame;
CABasicAnimation *resizeAnimation = [CABasicAnimation animationWithKeyPath:@"bounds.size"];
[resizeAnimation setToValue:[NSValue valueWithCGSize:CGSizeMake(40.0f, imageFrame.size.height * (40.0f / imageFrame.size.width))]];
resizeAnimation.fillMode = kCAFillModeForwards;
resizeAnimation.duration = duration;
resizeAnimation.removedOnCompletion = NO;
return resizeAnimation;
}
// Fade
- (CABasicAnimation *)fadeAnimationWithFinalOpacity:(CGFloat)opacity withDuration:(CGFloat)duration {
CABasicAnimation *fadeOutAnimation = [CABasicAnimation animationWithKeyPath:@"opacity"];
[fadeOutAnimation setToValue:[NSNumber numberWithFloat:opacity]];
fadeOutAnimation.fillMode = kCAFillModeForwards;
fadeOutAnimation.removedOnCompletion = NO;
fadeOutAnimation.duration = duration;
return fadeOutAnimation;
}
“我将在我的代码中搜索一个示例”那太好了!谢谢