Вот мой быстрый вариант чистого Javascript и простой галереи. Вы можете легко адаптировать его! Не стесняйтесь спрашивать разъяснения!
var gallery = document.getElementById("gallery");
var imgs = gallery.children;
var modal = document.getElementById("modal");
var modal_img = modal.children[0];
for (var i = 0; i < imgs.length; i++) {
imgs[i].onclick = function() {
modal_img.src = this.src;
modal.classList.add("show");
}
}
// Close when clicking anywhere on modal not on img
modal.onclick = function(e) {
if (e.target !== this)
return;
modal.classList.remove("show");
}
#gallery img {
width: 75px;
cursor: pointer;
}
#modal {
display: none;
text-align: center;
}
#modal.show {
display: block;
}
#modal img {
width: 250px;
position: relative;
z-index: 3;
}
#modal:before {
content: "";
position: fixed;
top: 0; left: 0; right: 0; bottom: 0;
z-index: 2;
background-color: rgba(0,0,0,.8);
}
<div id="gallery">
<img src="https://www.w3schools.com/w3css/img_lights.jpg" />
<img src="https://cdn.pixabay.com/photo/2016/06/18/17/42/image-1465348_960_720.jpg" />
</div>
<div id="modal"><img src="" /></div>
initWithCoder:
используется ОС при отмене архивирования файлов XIB; если вы посмотрите внимательно, вы увидите, что initWithFrame:
не вызывается для представлений, которые вы создаете в своей XIB; вместо них будет вызван initWithCoder:
.
Пользовательские настройки по умолчанию - это, в основном, список свойств. Списки свойств аналогичны JSON и могут хранить только определенные типы данных - NSString, NSNumber, NSData, NSDate, NSArray, NSDictionary. Если вы попытаетесь сохранить что-либо еще по умолчанию для пользователя, вы получите исключение. Списки свойств также не могут обрабатывать произвольные графы объектов, только деревья.
Вы всегда можете взять свое пользовательское состояние и преобразовать его в структуру данных, совместимую со списком свойств, а затем сохранить ее по умолчанию; но тогда ты
NSCoder
является стандартным методом какао для реализации сериализации. Подробности см. В руководстве по программированию архивов и сериализаций Apple для какао .
Я использую NSCoder всякий раз, когда у меня есть какие-то сложные данные для хранения, которые мне никогда не придется редактировать вручную. Например, мое приложение Converter хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.
Конвертер my app хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults. Конвертер my app хранит курсы обмена валют, загруженные из Интернета, в архив NSCoder. Тем не менее, это единственное, что хранится в таком архиве: определения юнитов, которые изменяются только вручную, хранятся в серии файлов plist в комплекте приложений, а такие вещи, как последние выбранные юниты и значения, хранятся в NSUserDefaults.