Потяните сетку изображений с помощью Базовой Графики в drawRect:

Вы, безусловно, можете использовать этот метод, который предложил 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

Ран Вне времени, поэтому не было возможности проверить, но что-то вроде этого должно работать

5
задан David Rönnqvist 5 September 2012 в 19:05
поделиться

3 ответа

Я думаю, что в вашем В этом случае UIImage должен справиться с этим приложением и дать хорошую производительность. Проблема заключается в том, что вы заставляете весь экран перерисовываться в ответ на каждое сообщение drawRect: . Передаваемый прямоугольник указывает «грязную область», которую нужно перерисовать. Любой другой рисунок просто тратит время.

Аналогично, прямоугольник, который вы передаете в setNeedsDisplay вашего представления: - это прямоугольник, который вы специально хотите аннулировать. Вычислите прямоугольник вокруг касания и обесцените это. UIKit (потенциально) объединит несколько грязных каналов и отправит один drawRect: .

Я бы посоветовал вам выполнить следующие оптимизации:

  1. проверить грязный прямоугольник, переданный в ваш drawRect: (в отладчике), и если он меньше, чем полноэкранный код записи, чтобы убедиться, что вы перерисовываете только изображения в пределах грязного прямоугольника
  2. Используйте событие touch, чтобы удостовериться, что вы делаете недействительными только те области, которые нужно перерисовать, а затем снова посетите 1.
  3. Если это не дает нужной вам производительности, используйте Quartz для рисования черно-белых канатов вместо использования изображений, если это какая-то странность UIImage (но я сомневаюсь, что это так)

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

2
ответ дан 15 December 2019 в 01:10
поделиться

77 дискретных изображений не слишком обременительны в качестве сетки CALayers или UIViews (при условии, что ваши изображения - только несколько пикселей), поэтому я бы рекомендовал этот подход. UIViews не намного тяжелее, чем CALayers, поэтому я хотел бы создать сетку из отдельных UIImageViews (предполагая, что ваше черное изображение - это больше, чем просто черный цвет, если вы не можете просто установить стандартный backgroundColor UIView на черный или белый). Если вам не нужно было отслеживать прикосновения при их перемещении по видам, вы могли бы даже выполнить обработку касаний для переключения изображения вида в пользовательском подклассе UIImageView или с помощью методов делегирования в вашем контроллере.

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

1
ответ дан 15 December 2019 в 01:10
поделиться

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

Другой метод решения этой проблемы - создать несколько CALayer и перемещать / скрывать их.

Кроме того, вы никогда не должны вызовите drawRect: напрямую, используйте вместо него setNeedsDisplay . drawRect: будет вызываться UIKit всякий раз, когда область представления недопустима и нуждается в рисовании.

1
ответ дан 15 December 2019 в 01:10
поделиться