Как я могу нарисовать в области «отказов» UIScrollView? - PullRequest
5 голосов
/ 21 апреля 2011

У меня есть пользовательский вид, который я включаю в UIScrollView, который прокручивается по горизонтали.Представление рисует фон с горизонтальными линиями и несколькими различными цветами фона.Когда я прокручиваю в крайнее левое положение так, что представление прокрутки «подпрыгивает», я вижу серый фоновый цвет.Что я хотел бы сделать, так это нарисовать дополнительные фоновые линии и цвета в этой области, чтобы казалось, что представление продолжается вечно, но я не могу понять, как это сделать.Я пытался установить для clipsToBounds значение NO для всех видов и рисовать в области за пределами вида, но это, похоже, не работает.Как я могу рисовать в этой области?

Ответы [ 2 ]

1 голос
/ 22 апреля 2011

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

    CGFloat scrollViewHeight = 300;
    CGFloat preferredWidthOfContent = 500;
    CGFloat gutterMargin = self.bounds.size.width / 2;
    scrollView.frame = CGRectMake(-1 * gutterMargin, 0, self.bounds.size.width, scrollViewHeight)
    scrollView.contentSize = CGSizeMake(preferredWidthOfContent + 2 * gutterMargin, scrollViewHeight);
    contentView.frame = CGRectMake(0, 0, preferredWidthOfContent + 2 * gutterMargin, scrollViewHeight);

Представление содержимого должно знать ширину поля желоба, а затем рисует фактическоесодержание в правильном месте на основе этого.Когда scrollView «отскочил», тогда фактически отображается остальная часть представления содержимого.

Этот прием работает, потому что представление прокрутки выходит за пределы экрана.Если вы хотите использовать тот же трюк с видом прокрутки, который не касается краев экрана, вам придется просто поместить другой вид поверх скролла, чтобы скрыть дополнительное пространство.

0 голосов
/ 21 апреля 2011

Если вы рисуете свои линии в методе drawRect:, нет возможности нарисовать их за пределами границ вида. Свойство clipsToBounds влияет только на подпредставления, поэтому теоретически вы можете добавить подпредставление к своему основному виду (отображающему контент) с рамкой, которая продолжается справа от вашего вида, и нарисовать строки в этом подпредставлении.

Другой вариант - добавить подпредставление в представление прокрутки и разместить его справа от основного вида. Затем нарисуйте линии в этом подпредставлении. Представление прокрутки будет по-прежнему отклоняться, так как ему все равно, будут ли в нем частично видимые представления, оно только смотрит на свойство contentSize, чтобы решить, когда прекратить прокрутку.

Если ни один из вариантов не подходит, опишите более подробно, какие линии вы рисуете и какой вид вы хотели бы достичь.

...