#objective-c #ios #svg
#objective-c #iOS #svg
Вопрос:
У меня есть UIScrollView с множеством сложной векторной графики, отображаемой в плиточных UIWebViews.
Проблема в том, что при довольно быстрой прокрутке вида возникают неприглядные визуальные сбои (несколько последовательных быстрых пролистываний), поскольку повторно используемые плитки содержат снимок старого рендеринга до их обновления. Конечным результатом является то, что плитки, удаляющиеся с экрана, сразу же возвращаются с другой стороны, прежде чем их содержимое будет внезапно перерисовано.
Я надеюсь, что есть какой-то способ ограничить максимальную скорость, с которой можно просматривать прокрутку. Я мог бы просто отключить прокрутку, но это было бы не идеально.
Если есть способ очистить сохраненный рендеринг UIWebView, это также может быть хорошим исправлением.
Комментарии:
1. Исключение прокрутки. Это прокрутка внутри прокрутки.
2. Отключение прокрутки в UIWebViews устраняет эту проблему. Я согласен, что это не идеально, но поддержка SVG в iOS совершенно жалкая. Пробовал SVGKit, но он не поддерживает много базовых элементов, таких как текст.
Ответ №1:
Решение 1
Скройте UIWebViews, когда они начинают загружать страницу, и покажите их, когда они закончат, с помощью делегата UIWebView ( UIWebViewDelegate
).
В webViewDidStartLoad:
скрыть UIWebView (т.е. myWebView.hidden = YES;
). В webViewDidFinishLoad:
показать его снова.
Возможно, было бы лучше скрыть WebView в другом месте вашего кода, но показывать его в webViewDidFinishLoad: — хорошая идея. Вам также понадобится фон для scrollview, так как вы увидите, что UIWebView использует этот метод.
Решение 2
Измените UIScrollView в decelerationRate
Скорость замедления
Значение с плавающей запятой, определяющее скорость замедления после того, как пользователь поднимет палец.
@property(nonatomic) float decelerationRate
Обсуждение
Ваше приложение может использовать константы UIScrollViewDecelerationRateNormal и UIScrollViewDecelerationRateFast в качестве опорных точек для разумных скоростей замедления.
Доступность
Доступно в iOS 3.0 и более поздних версиях.
Объявлено в
UIScrollView.h
Комментарии:
1. Теперь, почему я не подумал об этом раньше ..? Никогда не был так благодарен за возможности Интернета. Спасибо за советы!
2. Этот сайт отлично подходит для получения ответов. Итак, сработало ли для вас одно из двух решений? Я предполагаю, что вам больше понравился первый, поскольку он казался более элегантным подходом, но я не удивлюсь, если вы сделаете их оба.
3. выполнил их оба, затем установил фоновое изображение для обозначения неотрендированных плиток. теперь есть обратная связь с пользователем, если он прокручивает так безумно быстро, что в течение нескольких секунд ничего не отображается! я надеюсь на лучшую поддержку svg в будущих версиях iOS. каждая плитка отображается примерно через 100-200 мс прямо сейчас .. заметно глючит, но все еще пригодна для использования.