在iOS中,我试图创建一个缩小图标的图标效果,并在逐渐消失时以弧形飞过屏幕,然后消失.我已经使用CAAnimationGroup实现了这三种效果,它可以实现我想要的效果.问题是当动画结束时,视图显
动画不应该恢复到它的原始位置,而是在最后消失.
UIBezierPath *movePath = [UIBezierPath bezierPath]; CGPoint libraryIconCenter = CGPointMake(610, 40); CGPoint ctlPoint = CGPointMake(self.imgViewCropped.center.x, 22.0); movePath moveToPoint:self.imgViewCropped.center]; [movePath addQuadCurveToPoint:libraryIconCenter controlPoint:ctlPoint]; CAKeyframeAnimation *moveAnim = [CAKeyframeAnimation animationWithKeyPath:@"position"]; moveAnim.path = movePath.CGPath; moveAnim.removedOnCompletion = NO; CABasicAnimation *scaleAnim = [CABasicAnimation animationWithKeyPath:@"transform"]; scaleAnim.fromValue = [NSValue valueWithCATransform3D:CATransform3DIdentity]; scaleAnim.toValue = [NSValue valueWithCATransform3D:CATransform3DMakeScale(0.1, 0.1, 1.0)]; scaleAnim.removedOnCompletion = NO; CABasicAnimation *opacityAnim = [CABasicAnimation animationWithKeyPath:@"alpha"]; opacityAnim.fromValue = [NSNumber numberWithFloat:1.0]; opacityAnim.toValue = [NSNumber numberWithFloat:0.0]; opacityAnim.removedOnCompletion = NO; CAAnimationGroup *animGroup = [CAAnimationGroup animation]; animGroup.animations = [NSArray arrayWithObjects:moveAnim,scaleAnim,opacityAnim, nil]; animGroup.duration = 0.6; animGroup.delegate = self; animGroup.removedOnCompletion = NO; [self.imgViewCropped.layer addAnimation:animGroup forKey:nil];我相信你需要将动画的fillMode属性设置为kCAFillModeForwards.这应该在结束时冻结动画.另一个建议(老实说,这是我通常做的)只是在你设置动画之后将图层本身的属性设置到它们的最终位置.这样,当移除动画时,图层仍将最终属性作为其模型的一部分.
另外,忽略CAAnimationGroup中包含的动画的removedOnCompletion标志.您可能只是删除这些作业,因为它们会产生误导.将它们替换为fillMode的赋值,如上所述.