gpt4 book ai didi

ios - 如何更改 UIScrollView contentOffset 动画速度?

转载 作者:可可西里 更新时间:2023-11-01 05:03:59 25 4
gpt4 key购买 nike

有没有一种方法可以更改 contentOffset 动画速度而无需创建您自己的设置 contentOffset 的动画?

我无法为 contentOffset 更改创建自己的动画的原因是这不会在动画期间定期调用 -scrollViewDidScroll:。

最佳答案

不幸的是,没有干净简单的方法来做到这一点。这是一个有点残酷但有效的方法:

1) 添加 CADisplayLink 作为属性:

@property (nonatomic, strong) CADisplayLink *displayLink;

2) 动画内容偏移:

CGFloat duration = 2.0;

// Create CADisplay link and add it to the run loop
self.displayLink = [CADisplayLink displayLinkWithTarget:self selector:@selector(_displayLinkTick)];
[self.displayLink addToRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];

[UIView animateWithDuration:duration animations:^{
self.scrollView.contentOffset = newContentOffset;
} completion:^(BOOL finished) {
// Cleanup the display link
[self.displayLink removeFromRunLoop:[NSRunLoop currentRunLoop] forMode:NSDefaultRunLoopMode];
self.displayLink = nil;
}];

3) 最后观察 presentationLayer 的变化,例如:

- (void)_displayLinkTick {
CALayer *presentationLayer = (CALayer *)self.scrollView.layer.presentationLayer;
CGPoint contentOffset = presentationLayer.bounds.origin;
[self _handleContentOffsetChangeWithOffset:contentOffset];
}

- (void)_handleContentOffsetChangeWithOffset:(CGPoint)offset {
// handle offset change
}

关于ios - 如何更改 UIScrollView contentOffset 动画速度?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15189549/

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