我正在使用一个UIScrollView子类,我只是试图捕捉一个特定的事件,但我不知道如何处理它。基本上我有一个水平的uiscrollview,它已经关闭了弹跳。当我滚动到滚动视图的两端时,它应该会停止,它确实会停止。但是现在,如果用户尝试向当前占用的内容末尾的方向滑动,我想捕捉一个事件。例如,如果用户一直向右滚动,并尝试再次向右滑动,我如何捕捉此手势。
我已经尝试在uiscrollview子类中添加手势识别器,当它到达末尾时,它会关闭滚动启用,从而允许捕捉这些手势。但是,如果用户尝试向可用的方向滑动,滚动效果将不会在滚动关闭时发生。即,当用户已经向右滚动,然后尝试向左滚动时,不会发生任何事情,因为关闭滚动以捕捉向右的可能手势。
关于如何捕捉在特定方向上滚动的尝试,有什么想法吗?谢谢
发布于 2011-10-13 20:45:31
捕捉该事件的一种方法是将bounces设置为属性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;
}委托的用法只是一个建议,任何方法调用都可以。
发布于 2011-10-13 20:34:19
这是一种变通方法,但您可以将contentSize设置得更大。然后在scrollViewDidScroll委托方法中,您可以检查滚动视图的contentOffset。如果它高于所需的值,您可以将其设置回您的上限,然后根据需要进行调整。也许它在视觉上看起来不是很好,但它可以工作。很难说你的目标是什么。
发布于 2011-10-13 22:19:35
有点像是把一些东西拼凑在一起,虽然不是很好,但很管用
从关闭反弹开始
使用- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{}
我检查contentoffset,如果在滚动视图的两端,我就将其标记为是,并将bouncing设置为on。然后在
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{}
我还检查了这里的contentoffset,以及它是否超出了滚动内容的两端,然后关闭滚动并将内容视图设置到结束位置。下面是代码。非常混乱,对此感到非常羞愧,但我会处理它的。
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView{
int t = self.contentOffset.x;
if (t==0) {
leftSet = YES;
rightSet = NO;
self.bounces = YES;
} else if (t>=imagePosX-480) {//if scrollview reaches the end
rightSet = YES;
leftSet = NO;
self.bounces = YES;
}
}
-(void)scrollViewDidScroll:(UIScrollView *)scrollView{
int t = self.contentOffset.x;
if (t<=0) {
if (leftSet) {
self.bounces = NO;
self.scrollEnabled = NO;
//perform code i wanted here
}
} else if (t>=imagePosX-480) {//if scrollview reaches the end then snap back to start
if (rightSet) {
self.bounces = NO;
self.scrollEnabled = NO;
//perform code i wanted here
}
}
else{
rightSet = NO;
leftSet = NO;
self.bounces = NO;
}
}我决不推荐上面的方法,但它真的有效,不幸的是,还有更重要的事情要做。我的工作方式差一点就变了,而且看起来很干净,所以如果有人说他的作品会默认,请投票给我作为答案。
https://stackoverflow.com/questions/7754098
复制相似问题