Как изменить Frame.size с помощью CABasicAnimation - PullRequest
4 голосов
/ 01 сентября 2010

Привет, я изменил размер кадра с помощью CABasicAnimation, которую я использовал ниже код

CABasicAnimation *newanim; 
newanim = [CABasicAnimation animationWithKeyPath:@"bounds.size"];

newanim.duration=3.0;
newanim.fromValue=[NSValue valueWithCGSize:CGSizeMake(0,0)];
newanim.toValue=[NSValue valueWithCGSize:CGSizeMake(self.backgroundImageView.bounds.size.width, self.foregroundImageView.bounds.size.height)];

newanim.fillMode=kCAFillModeForwards;
newanim.autoreverses = YES;
newanim.repeatCount = 1;
newanim.timingFunction = [CAMediaTimingFunction functionWithName: kCAMediaTimingFunctionEaseInEaseOut];
[self.view.layer addAnimation:newanim forKey:@"changeSize"]; 

Но анимация начинается с начала координат и перемещается в обе стороны (как анимация начинается с центра).

iпопытался изменить newanim = [CABasicAnimation animationWithKeyPath: @ "frame.size"];

это не работает вообще.

1 Ответ

11 голосов
/ 10 мая 2011

У Apple есть ответ на этот вопрос: http://developer.apple.com/library/mac/#qa/qa1620/_index.html

Но лично я не думаю, что это лучший способ, CATransform3DMakeScale кажется лучше:

CABasicAnimation *transformAnimation = [CABasicAnimation animationWithKeyPath:@"transform"];
transformAnimation.duration=3.0;
transformAnimation.toValue=[NSValue valueWithCATransform3D:CATransform3DMakeScale(scaleFactorX, scaleFactorY, scaleFactorZ)];
transformAnimation.removedOnCompletion = FALSE;

[layer addAnimation:transformAnimation forKey:@"transform"];
...