Вы, безусловно, можете использовать этот метод, который предложил Taplar, или вы можете отказаться от него и использовать css только с: target псевдоселектором . См. Приемы css здесь
. По сути, вы будете скрывать свои разделы. как вы уже делаете, а затем добавьте класс с display: block следующим образом
#contact:target {
display: block;
}
По общему признанию, показ содержимого по умолчанию немного сложнее. Вы можете проверить наличие значения в хэше и показать содержимое по умолчанию, если его нет. Я посмотрю на это и вернусь к вам
Редактировать: Посмотрите на этот вопрос принятый ответ с использованием псевдоселекторов
[115 ] Вот ссылка на этот вопрос
Вы могли бы сделать что-то похожее на это:
/* based onhttps://stackoverflow.com/questions/6867095/css-selector-when-target-empty */
.section-wrapper>.dynamic-content:target~#default-content,
.section-wrapper>.dynamic-content {
display: none;
}
.dynamic-content>#default-content,
.dynamic-content>.dynamic-content:target {
display: block;
}
This is the default content
Contact content
Expertise content
About content
Ран Вне времени, поэтому не было возможности проверить, но что-то вроде этого должно работать
Я думаю, что в вашем В этом случае UIImage должен справиться с этим приложением и дать хорошую производительность. Проблема заключается в том, что вы заставляете весь экран перерисовываться в ответ на каждое сообщение drawRect:
. Передаваемый прямоугольник указывает «грязную область», которую нужно перерисовать. Любой другой рисунок просто тратит время.
Аналогично, прямоугольник, который вы передаете в setNeedsDisplay вашего представления:
- это прямоугольник, который вы специально хотите аннулировать. Вычислите прямоугольник вокруг касания и обесцените это. UIKit (потенциально) объединит несколько грязных каналов и отправит один drawRect:
.
Я бы посоветовал вам выполнить следующие оптимизации:
drawRect:
(в отладчике), и если он меньше, чем полноэкранный код записи, чтобы убедиться, что вы перерисовываете только изображения в пределах грязного прямоугольника Если вам нужно чтобы отображать растровые изображения и 1 & 2 не получить нужную вам производительность, вам придется прибегнуть к технологии более низкого уровня.
77 дискретных изображений не слишком обременительны в качестве сетки CALayers или UIViews (при условии, что ваши изображения - только несколько пикселей), поэтому я бы рекомендовал этот подход. UIViews не намного тяжелее, чем CALayers, поэтому я хотел бы создать сетку из отдельных UIImageViews (предполагая, что ваше черное изображение - это больше, чем просто черный цвет, если вы не можете просто установить стандартный backgroundColor UIView на черный или белый). Если вам не нужно было отслеживать прикосновения при их перемещении по видам, вы могли бы даже выполнить обработку касаний для переключения изображения вида в пользовательском подклассе UIImageView или с помощью методов делегирования в вашем контроллере.
Таким образом, единственным часть отображения, которая будет повторно отображаться, будет определенным UIViews, которые изменяются.
Чтобы сделать недействительной только часть вашего представления, вызовите setNeedsDisplayInRect:
только с областью, которая имеет изменилось. Если несколько ректов изменились, вы можете вызвать их дважды с разными ректами.
Другой метод решения этой проблемы - создать несколько CALayer
и перемещать / скрывать их.
Кроме того, вы никогда не должны вызовите drawRect:
напрямую, используйте вместо него setNeedsDisplay
. drawRect:
будет вызываться UIKit всякий раз, когда область представления недопустима и нуждается в рисовании.