Запутался в свойстве кадра UIView

Я создаю прототип приложения для iPad, которое рисует диаграммы. У меня есть следующая иерархия представлений:

UIView UIScrollView DiagramView: Панель навигации UIView TabBar

И подкласс UIViewController, объединяющий все это.

Прежде чем рисовать диаграмму в первый раз, я вычисляю размеры диаграммы и устанавливаю фрейм DiagramView на этот размер, а также размер содержимого прокрутки.

-(void)recalculateBounds
{
 [renderer diagram:diagram shouldDraw:NO];
 SQXRect diagramRect = SQXMakeRect(0.0,0.0,[diagram bounds].size.width,[diagram bounds].size.height);
 self.frame = diagramRect;
 [(UIScrollView*)[self superview] setContentSize:diagramRect.size];
}

Я должен сообщить, что размер кадра составляет около 1500 x 3500, что, как я знаю, смешно. Я просто хочу сосредоточиться на некоторых других частях приложения, прежде чем приступить к оптимизации кода рендеринга.

Это прекрасно работает, за исключением того, что прямоугольник, передаваемый в drawRect, имеет не тот размер, который я установил, и мой рисунок обрезается внизу. Он близок к размеру, который я установил, но больше по ширине и короче по высоте.

Также следует отметить тот факт, что если я заставлю кадр быть намного больше, чем, как я знаю, нужно для диаграммы, то drawRect:rect будет достаточно большим, и не произойдет отсечения. Конечно, это заставляет меня задаться вопросом, должен ли размер кадра учитывать какую-то другую экранную недвижимость, такую ​​​​как панели инструментов, но мое чтение документов говорит мне, что кадр находится в координатах супервизора, которые были бы прокруткой, поэтому я считаю, что я не должен нужно беспокоиться о таких вещах.

Любая идея, что вызывает это несоответствие?


person user157196    schedule 30.03.2010    source источник
comment
Я не думаю, что что-то в вашем описании указывает на проблему. Проверьте, не вызывает ли изменение размера представления сочетание свойств contentMode и contentStretch.   -  person NWCoder    schedule 31.03.2010
comment
Я попытался установить их в представлении прокрутки и диаграммы, но ничего не изменилось. :(   -  person user157196    schedule 31.03.2010


Ответы (1)


Следует быть осторожным с тем, что максимальный размер текстуры на iPhone без 3G S (и даже в Симуляторе на моем MacBook Air) составляет 2048 x 2048. Если вы попытаетесь создать вид или слой, превышающие этот размер в любом , обычно он просто не отображается, а если и отображается, то может быть каким-то образом обрезан. Очевидно, я не тестировал это на iPad, чтобы увидеть, есть ли у него такие же ограничения на размер текстуры.

Если вам нужно иметь очень большое представление, подобное этому, рекомендуемый способ приблизиться к этому — использовать CATiledLayer или UIView, поддерживаемый CATiledLayer. Вы должны иметь возможность указать это в своем подклассе UIView, переопределив следующий метод:

+ (Class) layerClass 
{
    return [CATiledLayer class];
}
person Brad Larson    schedule 31.03.2010