很抱歉一个大问题,真正的问题是粗体,现在有些解释。
我在我的项目中使用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内容滚动到具有自定义动画持续时间的自定义点? 附:抱歉英语不好。
答案 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
CoreAnimation
关于动画结帐Apple Documentation