【问题标题】:UIScrollView ContentOffset not Reaching Edge of ScreenUIScrollView ContentOffset 未到达屏幕边缘
【发布时间】:2012-06-07 03:21:55
【问题描述】:

我遇到了UIScrollView 的问题,不确定这是否是一个错误,但是当我使用其delegate 和一个可缩放/可平移的图像实现UIScrollView 时就会发生这种情况。

首先,当我平移图像时,contentOffset 可能是一个非整数值 (.5)。对于某些zoomScales,当我将图像一直平移到边缘时,由于这个原因,它在到达边缘时下降了半个像素。

这是一个很小的东西,但在我的应用程序中我必须在屏幕上拖动对象,如果我将一个对象拖到角落,你会注意到它。

我已经实施了以下方法来尝试纠正问题并使其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);
        }
    }
}

但是,它似乎不起作用,因为我的 targetContentOffsetcontentOffset 属性完全不同。

有人a)为什么会出现这个错误或b)如何使用上述委托方法或其他方式修复它?

【问题讨论】:

  • 嗯,你是对的。这似乎应该工作。我删除了我的答案,并在此过程中学到了一些新东西。

标签: iphone ios cocoa-touch uiscrollview uiscrollviewdelegate


【解决方案1】:

或者,此方法实现也可能对您有用。

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

查看下面的 cmets,您可能必须实现多种方法。上面的一个或另一个答案帖子中所述的一个当它减速到停止时,只是为了确保你触及你的边缘条件,以及你已经必须为速度点处理的方法。

【讨论】:

  • 如有必要,还可以尝试 scrollViewDidEndDecelerating 和/或 scrollViewDidScroll...只需将内容偏移设置为新值,而不是动画。
猜你喜欢
  • 1970-01-01
  • 2018-10-03
  • 1970-01-01
  • 2021-07-05
  • 2014-02-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多