Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone UIScrollView未使用setContentOffset滚动到正确位置:已设置动画:_Iphone_Objective C_Ios_Uiscrollview - Fatal编程技术网

Iphone UIScrollView未使用setContentOffset滚动到正确位置:已设置动画:

Iphone UIScrollView未使用setContentOffset滚动到正确位置:已设置动画:,iphone,objective-c,ios,uiscrollview,Iphone,Objective C,Ios,Uiscrollview,我在UIScrollView中有一系列图像。当用户释放滚动动作时,我希望视图以单个图像为中心。我已经实现了代码,但是底层行为是不正确的。我对setContentOffset:animated:的调用具有正确的值,但视图实际上没有滚动到该点。以下是一些调试的输出: 2011-03-26 17:28:16.201 PivotMachine[39984:207] Dragging Beginning at: 270, 0 2011-03-26 17:28:16.322 PivotMachine[3

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

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)setContentOffset:animated:
调用冲突。两个动画都将继续运行,并且视图将显示哪一个获胜,但内部状态基于
setContentOffset
正确。我以为
setContentOffset
关闭了现有的动画。是吗?如果不是,如何关闭它?

尝试使用
-(void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated
()而不是设置contentOffset

否则,我可以建议签出UIScrollView的属性,尽管它可能太有限,无法执行您想要的操作。

-(void)scrollRectToVisible:(cRect)rect animated:(BOOL)animated的行为相同(有关更多详细信息,请参见问题),不幸的是,如果不重新构造某些内容(我可能决定尝试),分页将无法为我工作。我也有同样的问题,但关闭setContentOffset上的动画并不会导致最终滚动位置在视觉上与contentOffset匹配。所以这似乎不是动画对动画的问题,但可能在减速时设置contentOffset?
- (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];
}