使用CoreAnimation动画滚动UIScrollView

时间:2012-02-23 08:09:24

标签: iphone ios uiscrollview core-animation

很抱歉一个大问题,真正的问题是粗体,现在有些解释。

我在我的项目中使用CoreAnimation来动画一些像这样移动的对象。

CABasicAnimation *moveAnimation;        
moveAnimation=[CABasicAnimation animationWithKeyPath:@"position"];      
moveAnimation.duration = 2.0;       
moveAnimation.repeatCount=1;        
moveAnimation.autoreverses=NO;  
moveAnimation.delegate = self;
moveAnimation.fromValue = [NSValue valueWithCGPoint:[crawler.layer position]];
moveAnimation.fillMode = kCAFillModeForwards;
moveAnimation.removedOnCompletion = NO;
CGPoint p;
moveAnimation.toValue = [NSValue valueWithCGPoint:CGPointMake(100, 100)];
[crawler.layer addAnimation:moveAnimation forKey:@"moveAnimation"];

现在我需要动画滚动一些UIScrollView。我无法使用setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated方法,因为它无法自定义动画持续时间。

我可以这样做

CGContextRef context = UIGraphicsGetCurrentContext();
[UIView beginAnimations:nil context:context];
[UIView setAnimationCurve:UIViewAnimationCurveLinear];
[UIView setAnimationDuration:2];
[UIView setAnimationDelegate:self];
scrollView.contentOffset = CGPointMake(scrollView.contentOffset.x + 200, scrollView.contentOffset.y);
[UIView commitAnimations];

但它不是CoreAnimation,在一个应用程序中使用两种不同的动画技术并不是一个好习惯,我认为。

有没有办法使用CoreAnimation动画将UIScrollView内容滚动到具有自定义动画持续时间的自定义点? 附:抱歉英语不好。

4 个答案:

答案 0 :(得分:26)

您可以使用:

[UIView animateWithDuration:duration animations:^ {
    [scrollView setContentOffset:destination animated:NO];
}];

您可以通过这种方式设置动画的持续时间。

答案 1 :(得分:7)

[UIScrollViewNameHere setContentOffset:CGPointMake(x value of where you want to move to, y value of where you want to move to) animated:YES];

例如:

UIScrollView *scroll = [[UIScrollView alloc] initWithFrame:CGRectMake(4, 2, 2341, 412)];
[scroll setContentOffset:CGPointMake(320, 0) animated:YES];

答案 2 :(得分:5)

您应该阅读有关可动画的属性Programming iOS 5

实际上,当您尝试为图层设置动画时,Apple会提供一组可设置动画的属性,但您不限于此设置。你可以动画你想要的任何东西。

在所有情况下,您都不应使用kCAFillModeForwards,因为它会要求设备永久重绘用于动画的最后一个表示层,而不是使用图层的缓存表示。

所以你可以通过定义你的特定层来实现这样的事情,其中​​contentOffset属性被定义为可动画。并且为了工作,您应该首先验证scrollview使用哪种顶层类,以便通过子类化并设置想要的属性(contentOffset)动画,并通过设置此子类来设置滚动视图图层作为scrollview的顶层,你可以实现你想要做的事情。

这是理论!

但这是我会尝试的。 寻找此方法及其行为和意图

+ (BOOL)needsDisplayForKey:(NSString *)key

您可以阅读的另一件事是A start example。但这也意味着你应该自己重绘你的uiscrollview!

答案 3 :(得分:4)

我不认为您可以使用CoreAnimation为该点设置动画。

但您可以尝试使用您正在搜索的方法setContentOffset:animated:吗?

您只能转换UIView

的以下属性
  • 边界
  • 中心
  • 变换
  • 阿尔法
  • 的backgroundColor
  • contentStretch

CoreAnimation关于动画结帐Apple Documentation

的更多信息