Iphone UIScrollView未使用setContentOffset滚动到正确位置:已设置动画:
我在UIScrollView中有一系列图像。当用户释放滚动动作时,我希望视图以单个图像为中心。我已经实现了代码,但是底层行为是不正确的。我对setContentOffset:animated:的调用具有正确的值,但视图实际上没有滚动到该点。以下是一些调试的输出: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
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];
}