UIScrollView:缩放时禁用滚动

时间:2010-12-27 23:58:25

标签: iphone uiscrollview scroll zoom

有人可以建议如何在iOS4中放大时禁用滚动吗? 我有一个可以在iOS3上运行的实用程序,我通过覆盖内容视图中的setTransform方法来禁用缩放期间的滚动,例如:

- (void)setTransform:(CGAffineTransform)newValue;
{ 
 [(UIScrollView*)self.superview setScrollEnabled:NO];
 [super setTransform:newValue];
}

但是在iOS4中这个技巧不起作用。

非常感谢提前。

2 个答案:

答案 0 :(得分:4)

我认为你可以使用一些像这样的UIScrollViewDelegate方法:

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view //available starting with iOS 3.2
{
     [scrollView setScrollEnabled:FALSE];
}

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{
     if(scale == 1) 
        [scrollView setScrollEnabled:TRUE];
}

答案 1 :(得分:0)

尝试了乔治的方法,因为它似乎可行,但没有运气。检查了文档,并说它“当滚动被禁用时,滚动视图不接受触摸事件;它将它们转发到响应者链。”所以这不起作用,因为我们正在接收缩放触摸事件。所以我尝试了以下内容并且有效......

- (void)scrollViewWillBeginZooming:(UIScrollView *)scrollView withView:(UIView *)view
{
    peggedContentOffset = scrollView.contentOffset;
}

- (void) scrollViewDidZoom:(UIScrollView *)scrollView 
{
    scrollView.contentOffset = peggedContentOffset;
}

这可以通过在缩放开始时抓取contentOffset并在我们缩放时不断重置它来实现。我确信更多花哨的代码可以将缩放集中在缩放点上,而这只是锁定了桌面视图的顶部......但是它可以完成工作。