我遇到了UIScrollView的问题,不确定它是否是一个bug,但是当我用它的委托和一个zoomable / pannable图像实现一个UIScrollView时就会发生这个问题.
首先,当我平移图像时,contentOffset可能是非整数值(.5).对于某些缩放尺度,当我将图像一直平移到边缘时,由于这个原因,它的距离下降了半个像素.
这是一个非常小的事情,但在我的应用程序中,我必须在屏幕上拖动对象,如果我将对象拖到角落,您可以注意到它.
我已经实现了以下内容来尝试纠正问题并使其成为contentOffset必须是一个完整的值:
- (void)scrollViewWillEndDragging:(UIScrollView *)scrollView withVelocity:(CGPoint)velocity targetContentOffset:(inout CGPoint *)targetContentOffset
{
if (targetContentOffset->x != ceilf(targetContentOffset->x))
{
if (velocity.x > 0)
{
targetContentOffset->x = ceilf(targetContentOffset->x);
}
else
{
targetContentOffset->x = floorf(targetContentOffset->x);
}
}
if (targetContentOffset->y != ceilf(targetContentOffset->y))
{
if (velocity.y > 0)
{
targetContentOffset->y = ceilf(targetContentOffset->y);
}
else
{
targetContentOffset->y = floorf(targetContentOffset->y);
}
}
}
但是,它似乎不起作用,因为我的targetContentOffset与contentOffset属性完全不同.
有没有人a)为什么会发生这个错误或b)如何使用上面的委托方法或其他方法修复它?
最佳答案 或者,此方法实现也可能适用于您.
-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView
查看下面的评论,您可能必须实现多种方法.上面的那个或者在另一个答案中说明的那个,当它减速到停止时,只是为了确保你触摸你的边缘条件,以及你必须处理速度点的方法.