Масштабирование подпредставлений, вложенных глубоко в UIScrollView - PullRequest
2 голосов
/ 23 января 2011

Это вызывает у меня головную боль в невыразимых пропорциях.

Я пытаюсь создать приложение для рисования UML для iPad.

В настоящее время у меня есть функция для добавления классов в «холст».,Холст - это просто UIView, который находится внутри UIScrollView.

Каждый элемент класса - это UIView, содержащий имя класса, атрибуты и методы (UITextFields).Это все подпредставления холста.

Проблема, с которой я сталкиваюсь, заключается в том, что когда я увеличиваю классы с помощью функции увеличения / уменьшения, я просто получаю размытые UITextFields.Насколько я понимаю, это потому, что UIScrollView просто применяет преобразование, и мне нужно самому управлять масштабированием.

Однако единственный способ, которым я могу думать об этом, - это перерисовать классы и сделать их больше, чтопотенциально может исказить их расположение относительно друг друга.Например, если бы у меня было два класса рядом и один удвоился по размеру, тогда левый класс может перекрывать правый.

Я часами искал решение, и ничего не нашел, кто-нибудь знает пример кода или совет, который может проиллюстрировать ситуацию, напоминающую мою?Или, если нет, пример, который показывает, как масштабировать UITextField (или UILabel) способом, который я описал?

1 Ответ

2 голосов
/ 02 февраля 2011

Я думаю, что это может быть не самый очевидный ответ, основанный на том, как был сформулирован мой вопрос.Но я решил проблему следующим образом:

Первый шаг заключается в реализации:

- (void)scrollViewDidEndZooming:(UIScrollView
*)scrollView withView:(UIView *)view atScale:(float)scale;

Ключевой момент , который, как мне казалось, отсутствовал (каким-то образом), заключался в том, чтокогда UIScrollView масштабируется, он затем сбрасывает свой масштабный коэффициент до 1. Так что представьте, что вы увеличили до 125%, а затем уменьшили до 25%, вы бы фактически смотрели на исходное представление на 93% (ish), а не на 100%.,

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

Тогда лучший способ - отслеживать масштаб (яиспользовал переменную scaleTracker ) и затем использовал это значение для масштабирования ваших представлений.

Более конкретно для моей проблемы использовался следующий код:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
{

scaleTracker *= scale;

[canvas setTransform:CGAffineTransformIdentity];

canvas.frame = CGRectMake((int)canvas.original.origin.x,
                              (int)canvas.original.origin.y,
                              (int)(canvas.original.size.width * scaleTracker),
                              (int)(canvas.original.size.height * scaleTracker));
}

Удачивсем, кто имеет проблемы с UIScrollView.На данный момент я надеюсь, что это может предложить некоторую помощь всем, кто заинтересован.

...