gpt4 book ai didi

iphone - UIView 动画重置为开始

转载 作者:行者123 更新时间:2023-11-29 13:51:12 25 4
gpt4 key购买 nike

我正在尝试运行动画,以便 ScrollView 的 contentoffset 不断向下滚动。

但是,在每次重复之后,它会从原始位置开始动画,并且不会进行。

[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];
[UIView setAnimationRepeatCount: 100];

CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y += 50;
scrollView.contentOffset = contentOffset;

scrollView.transform = CGAffineTransformIdentity;
[UIView commitAnimations];

有什么想法吗?

最佳答案

您为什么要尝试手动 ScrollView ?你不能用这个方法吗

- (void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated

?

无论如何,我认为您的动画未按预期工作的原因是您设置了重复计数,而不是每次都实际重新渲染动画。如果您想解决这个问题,您可以通过创建一个包装动画并通过上下文指针传递参数的方法在动画回调中再次设置动画。

- (void) animateContentOffsetByAmount:(CGFloat)amount numberRemaining:(int)num {
if (num == 0) return;

[UIView setAnimationDelegate:self];
[UIView setAnimationDidStopSelector:
@selector(scrollAnimationStoppedWithID:finished:context:)];

//NSArray released in callback
NSArray* contextArray = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:amount],
[NSNumber numberwithInt:num], nil]
[UIView beginAnimations:nil context:contextArray];
[UIView setAnimationBeginsFromCurrentState: YES];
[UIView setAnimationDuration:1.0];
[UIView setAnimationCurve:UIViewAnimationCurveEaseInOut];

CGPoint contentOffset = scrollView.contentOffset;
contentOffset.y += amount;
scrollView.contentOffset = contentOffset;

scrollView.transform = CGAffineTransformIdentity;
[UIView commitAnimations];
}

- (void) scrollAnimationStoppedWithID:(NSString*)id
finished:(NSNumber*)finished context:(void*)context {
NSArray* contextArray = (NSArray*)context;
CGFloat amount = [(NSNumber*)[contextArray objectAtIndex:0] floatValue];
int count = [(NSNumber*)[contextArray objectAtIndex:1] intValue];
count = count - 1;
[contextArray release];
[self animateContentOffsetByAmount:amount numberRemaining:count]
}

然后在你的代码中,调用

[self animateContentOffsetByAmount:50 numberRemaining:100];

关于iphone - UIView 动画重置为开始,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3973583/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com