UIScrollView ContentOffset не достигает края экрана

У меня проблема с UIScrollView, не уверен, что это ошибка или нет, но это происходит, когда я реализую UIScrollView с этими delegate и масштабируемое / панорамируемое изображение.

Прежде всего, когда я перемещаю изображение, возможно, что 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);
        }
    }
}

Тем не менее, это не работает, как мой targetContentOffset полностью отличается от contentOffset имущество.

Кто-нибудь а) почему возникает эта ошибка или б) как ее исправить, используя метод делегата выше или каким-либо другим способом?

1 ответ

В качестве альтернативы реализация этого метода также может работать на вас.

-(void)scrollViewDidEndScrollingAnimation:(UIScrollView *)scrollView

Глядя на ваши комментарии ниже, вам, возможно, придется реализовать несколько методов. Тот, что выше или тот, который указан в другом ответном посте, когда он замедляется до остановки, просто для того, чтобы убедиться, что вы касаетесь своего граничного условия и метода, который вы уже должны обработать для точек скорости.

Другие вопросы по тегам