我在UIScrollView中有一系列图像。当用户释放滚动 Action 时,我希望 View 以单个图像为中心。我已经实现了代码,但是潜在的行为是不正确的。我对setContentOffset:animated:的调用具有正确的值,但是 View 实际上并未滚动到该点。这是一些调试的输出:

2011-03-26 17:28:16.201 PivotMachine[39984:207] Dragging Beginning at: 270,   0
2011-03-26 17:28:16.322 PivotMachine[39984:207]     Dragging Ended at: 360,   0 --> 350,   0
2011-03-26 17:28:16.624 PivotMachine[39984:207]    Scrolling Ended at: 350,   0
2011-03-26 17:28:25.648 PivotMachine[39984:207] Dragging Beginning at: 447,   0

如您所见,在内部,它认为它在360度停止了拖动,因此适本地前进到了350度,应该在该位置。从视觉上看,它位于450左右,它知道我何时再次开始拖动(是的,我知道您没有立即开始,所以我拖动非常缓慢,仅在事件发生前移动了几个像素)。

这是拖动代码(用于我的UIScrollView子类):
- (void)scrollViewWillBeginDragging:(UIScrollView *)scrollView
{
    CGPoint myLocation = self.contentOffset;
    NSLog(@"Dragging Beginning at: %3.0f, %3.0f", myLocation.x, myLocation.y);
}

- (void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollV
{
    CGPoint myLocation = self.contentOffset;
    NSLog(@"   Scrolling Ended at: %3.0f, %3.0f", myLocation.x, myLocation.y);
}

- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
    // Auto-scroll to the center of the closest menu
    if (scrollView != self)
    {
        DLog(@"[ScrollMenu scrollViewWillBeginDecelerating] called with non-self");
        return;
    }
    CGPoint myLocation = self.contentOffset;
    int idx = [self indexOfMenuClosestTo:myLocation];
    CGPoint menuPoint = CGPointMake(menuPoints[idx], self.contentOffset.y);
    NSLog(@"    Dragging Ended at: %3.0f, %3.0f --> %3.0f, %3.0f",
         myLocation.x, myLocation.y, menuPoint.x, menuPoint.y);
    [self setContentOffset:menuPoint animated:YES];
}

我应该注意,这是在模拟器中。我还不能在实际的电话上试用它,因为我还没有花钱在开发程序上(等到我几乎准备发布该应用程序时,以防万一:)。

这可能是模拟器问题吗?有人看到过类似的东西吗?哦,是的,我应该问:我做错什么了吗? ;)

跟进:我认为问题在于减速动画与我的-(void) setContentOffset:animated:调用冲突。两种动画都将继续运行,并且 View 显示哪个取胜,但是内部状态正确地基于setContentOffset。我以为setContentOffset关闭了现有动画。是否可以?如果不能,如何关闭它?

最佳答案

尝试使用- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated(docs)代替设置contentOffset。
否则,我建议您检查出UIScrollView的paging属性,尽管它可能太受限制而无法执行您想要的操作。

关于iphone - UIScrollView无法使用setContentOffset :animated:滚动到正确的位置,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5446156/

10-11 17:06