gpt4 book ai didi

iphone - uiscrollview 捕获滚动尝试

转载 作者:行者123 更新时间:2023-11-29 04:57:02 24 4
gpt4 key购买 nike

我正在使用 UIScrollView 子类,我只是想捕获一个特定的事件,但我不知道如何处理它。基本上我有一个水平的 uiscrollview 并且它已关闭弹跳。当我滚动到 ScrollView 的任一端时,它应该停止不动。但现在我想捕获一个事件,如果用户尝试朝当前占用的内容末尾的方向滑动。即,如果用户一直向右滚动并尝试再次向右滑动,我该如何捕获此手势。

我尝试将手势识别器添加到 uiscrollview 子类中,当它到达末尾时,它会关闭启用滚动功能,从而允许捕获这些手势。但是,如果用户尝试沿可用方向滑动,则滚动效果将不会发生,因为滚动已关闭。即,当用户向右滚动,然后尝试向左滚动时,不会发生任何事情,因为滚动被关闭以捕获可能的向右手势。

关于如何捕获向特定方向滚动的尝试有什么想法吗?谢谢

最佳答案

捕获该事件的一种方法是将弹跳设置为属性 YES 并在 ScrollView 子类中自行实现停止的弹跳。通过重写 setContentOffset 方法,您可以替换它滚动到的坐标。当这种情况发生时,您也可以让其他事情发生。

-(void)setContentOffset:(CGPoint)contentOffset
{
CGPoint validOffset = [self validVersionOfOffset:contentOffset];

if(contentOffset.x == validOffset.x)
{
[super setContentOffset:validOffset];
}
else
{
[super setContentOffset:validOffset animated:NO];
[bounceCatchDelegate scrollViewTriedBouncing:self];
}
}

-(void)setContentOffset:(CGPoint)contentOffset animated:(BOOL)animated
{
CGPoint validOffset = [self validVersionOfOffset:contentOffset];
[super setContentOffset:validOffset animated:animated];
if(contentOffset.x == validOffset.x)
{
[super setContentOffset:validOffset animated:animated];
}
else
{
[super setContentOffset:validOffset animated:NO];
[bounceCatchDelegate scrollViewTriedBouncing:self];
}
}

-(CGPoint)validVersionOfOffset:(CGPoint)offset
{
//Prevents bouncing at the left and right:
offset.x = fminf(offset.x, self.contentSize.width-CGRectGetWidth(self.frame));
offset.x = fmaxf(offset.x, 0.0f);
return offset;
}

委托(delegate)的使用只是一个建议,任何方法调用都可以。

关于iphone - uiscrollview 捕获滚动尝试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7754098/

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