我正在使用UIScrollView子类,我只是想捕捉一个特殊的事件,但我不知道如何处理它。 基本上我有一个水平的uiscrollview,它已经关闭弹跳。当我滚动到滚动视图的任一端时,它应该停止它所做的。但是现在我想要抓住一个事件,如果用户尝试向当前占用的内容结束方向滑动。即如果用户一直向右滚动并尝试再次向右滑动,我该如何捕捉到这种姿势。
我尝试将手势识别器添加到uiscrollview子类中,当它到达结尾时,它会关闭启用滚动功能,从而可以捕获这些手势。但是,如果用户尝试在可用的方向上滑动,则滚动效果不会发生,因为滚动关闭。即,当用户向右滚动时,然后尝试向左滚动,当滚动关闭以捕捉到可能的右手势时,不会发生任何事情。
关于如何尝试在特定方向上滚动的任何想法? 感谢
答案 0 :(得分:1)
捕获该事件的一种方法是将跳转设置为属性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;
}
委托的使用只是一个建议,任何方法调用都可以。
答案 1 :(得分:0)
这是一种解决方法,但您可以将contentSize设置为更大的实际值。然后在scrollViewDidScroll委托方法中,您可以检查scrollview的contentOffset。如果它高于期望值,则将其设置回您的上限并按照您的要求进行操作。也许它在视觉上看起来不那么好,但它可以起作用。很难说出你的目标是什么。
答案 2 :(得分:0)
开始关闭弹跳
使用 - (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView {}
我检查内容偏移,如果在滚动视图的任一端,我将其标记为,并将弹跳设置为开启。
- (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;
}
}
我绝不推荐上面的内容,但是该死的,它真的有用,不幸的是有更大的鱼可以炒。我接近于为我工作的异常方式,当然看起来更清洁,所以如果有人说他的作品不合格,则将其作为答案投票。
答案 3 :(得分:0)
在我的情况下,我使用以下内容设置了scrollView设置的contentSize:
self.scrollView.minimumZoomScale = (self.scrollView.frame.size.width/self.scrollView.contentSize.width);
这意味着只要用户开始放大滚动视图,就会触发nan并触发异常。