我正在尝试为滚动视图中某些子视图的位置设置动画。我想在它们滑入时创建特定效果。我只是通过更改 UIView 上的框架来使用隐式动画,但是当它们滑入时,它看起来太机器人化了。所以我希望在它们滑入的地方创造一个反弹效果,走得有点远,然后回到他们想要的位置,几乎就像滚动视图到达终点时的样子,只是有点相反。
无论如何,我无法让它改变框架的原点。我不确定我错过了什么,因为如果我切换出正在动画的内容(将第一个 //* 设置为 /*),它可以很好地改变不透明度。
- (void)slideInStories;
{
float scrollViewContentWidth = 0;
for (StoryViewController *storyController in storyControllers) {
NSMutableArray *animationPoints = [NSMutableArray array];
CGRect viewFrame = storyController.view.frame;
//*
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"frame"];
[animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];
viewFrame.origin.x = scrollViewContentWidth - 10;
[animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];
viewFrame.origin.x = scrollViewContentWidth;
[animationPoints addObject:[NSValue valueWithCGRect:viewFrame]];
/*/
CAKeyframeAnimation *animation = [CAKeyframeAnimation animationWithKeyPath:@"opacity"];
[animationPoints addObject:[NSNumber numberWithFloat:0.75]];
[animationPoints addObject:[NSNumber numberWithFloat:0.0]];
[animationPoints addObject:[NSNumber numberWithFloat:0.75]];
//*/
[animation setValues:animationPoints];
[animation setDuration:4.0];
viewFrame.origin.x = scrollViewContentWidth;
scrollViewContentWidth += viewFrame.size.width;
[storyController.view.layer setFrame:viewFrame];
[storyController.view.layer setOpacity:1.0];
[storyController.view.layer addAnimation:animation forKey:nil];
}
[scrollView setContentSize:CGSizeMake(scrollViewContentWidth, 187.0f)];
}