gpt4 book ai didi

iphone - 无法在 scrollViewDidEndDragging 中设置 ContentOffset

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:09:21 25 4
gpt4 key购买 nike

我正在尝试在以下委托(delegate)方法中修改滚动条的 contentOffset:

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate

我已经尝试了以下两种方式:

[UIView animateWithDuration:.2 animations:^ {
[scrollView setContentOffset:CGPointZero animated:NO];
}];

[UIView animateWithDuration:.2 animations:^ {
CGRect svBounds = self.bounds;
svBounds.origin.y = 0;
self.bounds = svBounds;
}];

问题是虽然这会立即更改偏移量(动画完成后由日志证明),但它不会更改可见的滚动位置。我的 ScrollView 的后续委托(delegate)方法进一步证明了这一点,这表明边界确实根本没有改变。表示y位置不为0。

是否禁止更改此特定委托(delegate)方法中的内容偏移量?如果是这样,我什么时候可以更改偏移量?一旦用户完成拖动(在一定数量之后),我正在尝试执行将可见滚动区域返回到顶部的动画。

谢谢!

最佳答案

我最终所做的是再次分派(dispatch)到主队列。含义:

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate {
NSLog(@"END DRAG");
CGFloat yVelocity = [scrollView.panGestureRecognizer velocityInView:scrollView].y;
if (yVelocity < 0) {
NSLog(@"Up");
} else {
NSLog(@"Down");
}

if (yVelocity < 0 && scrollView.contentOffset.y < -100 && scrollView.contentOffset.y > -200) //UP - Hide
{
NSLog(@"hiding");
dispatch_async(dispatch_get_main_queue(), ^{
[scrollView setContentOffset:CGPointMake(0, 0) animated:YES];
});
}
else if (yVelocity > 0 && scrollView.contentOffset.y < -100) //DOWN - Show
{
NSLog(@"showing");
dispatch_async(dispatch_get_main_queue(), ^{
[scrollView setContentOffset:CGPointMake(0, -300) animated:YES];
});
}

}

它确实有效:-)

关于iphone - 无法在 scrollViewDidEndDragging 中设置 ContentOffset,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19185748/

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