Що таке паралакс ефект на айфоні | Паралакс у сьомій версії операційної системи

Мабуть, найголовніша порада у тому, щоб не оновлюватися до iOS 10, якщо у вас старенький iPhone чи iPad. Хоча, якщо ви читаєте цю статтю, давати вам таку пораду вже пізно. Але не впадайте у відчай, є й інші перевірені способи!

Дайте iOS 10 годин

Нова iOS доверху наповнена різними функціями, які починають індексувати дані після первинного запуску та витрачають велику кількість ресурсів. Наприклад, вбудована галерея сканує всі ваші фото, визначаючи обличчя, і може спричинити уповільнення та зниження відгуку системи.

Щоб зберегти нерви, потрібно просто дати iOS час на виконання всіх процесів після первинного запуску. Як правило, це займає близько восьмої години, тому зручно оновитися ввечері і залишити iPhone або iPad у спокої на ніч. Зранку ви помітите, що система працює швидше.

Вимкніть ефект паралаксу

У iOS 10 стало ще більше анімації, яка значно навантажує процесори iPhone та iPad, особливо у старих пристроях. Якщо іконки на робочому столі не рухатимуться під час нахилу смартфона або планшета, ви втратите небагато. Зате відкриватися все стане набагато швидше.

«Налаштування» → «Основні» → «Універсальний доступ» → «Зменшення руху»

Потрібний нам тумблер сховався в надрах налаштувань. Клацаємо та насолоджуємося.

Зменшіть прозорість інтерфейсу

Ще один ефект із розряду прикрас. В інтерфейсі iOS 10 є багато напівпрозорих елементів, починаючи від дока і закінчуючи різними вікнами, що спливають. Якщо відключити його, вся ця краса з ефектами матового скла зміниться суворими сірими підкладками, але не витрачатиме зайві ресурси на відмальовування.


«Налаштування» → «Основні» → «Універсальний доступ» → «Збільшення розмаїття» → «Зниження прозорості»

Тумблер зменшення прозорості знаходиться в розділі "Збільшення контрасту" по сусідству зі "Зменшенням руху".

Вимкніть фонове оновлення програм

Оновлення даних у фоні - зручна штука, але чи три секунди очікування завантаження стрічки в Twitter або Facebook додаткового навантаження на процесор вашого iOS-пристрою, який і без того ледве справляється? До того ж це ще й навантаження на акумулятор, що позбавляє вас кілька хвилин. автономної роботи.


«Налаштування» → «Основні» → «Оновлення контенту»

У настоянках є цілий розділ зі списком усіх встановлених додатків. Потрібно зайти туди і переконатися, що тумблери включені тільки навпаки потрібних додатків. А ще краще вимкнути оновлення повністю.

Звільніть місце у сховищі

Ви напевно знаєте, що iOS іноді поводиться дивно, коли залишається мало вільного місцяна диску. iOS 10 не виняток: якщо накопичувач вашого iPhone або iPad забитий під зав'язку, система починає гальмувати.


«Налаштування» → «Основні» → «Використання сховища та iCloud»

Загляньте у статистику використання та проведіть ревізію. Бажано мати хоча б 1 ГБ вільного місця. Якщо видалення програм не дасть потрібних результатів, скористайтесь очищенням.

Перезавантажте свій iPhone або iPad

Якщо ви ще не зробили цього, обов'язково перезавантажте ваш iOS-пристрій. Після увімкнення видаляються тимчасові файли, кеш та інші речі, які можуть уповільнювати роботу системи. У свіжовстановленої iOS 10 цього барахла буде в надлишку, так що не полінуйтеся зробити перезавантаження і прибрати все зайве.


apple.com

Для перезавантаження потрібно одночасно натиснути та утримувати кнопку Home та кнопку включення, поки екран не стане білим та не з'явиться логотип Apple. Також можна просто вимкнути та включити ваш iPhone або iPad. Ефект буде аналогічним.

Ще одна пізнавальна замітка стосуватиметься паралаксу, який з'явився разом із сьомою версії iOS. У цій статті ми намагатимемося відповісти на головні питання, які турбують користувача.Так що це за панорамні шпалери і як поставити динамічні шпалери, як відключити паралакс ефект?

Панорамні картинки у «сімці»

Панорамні картинки вже були в першій бета iOS 7. Ця функція давала можливість поставити великі панорами як шпалери на робочий екран або екран блокування. Після інсталяції користувач міг крутити в руках свій гаджет з iOS 7, а на екрані фотографія переміщалася в залежності від кута, на який повернутий смартфон або планшет.

У шостий бета з якихось причин прибрала такий ефект з iOS 7. Саме тому оригінальна чиста iOS 7 не має такої функції, як панорами. Ви, звичайно, здивуєтеся і спитайте: «А де вони є?». Їх замінив паралакс ефект.Звичайно, можна поставити панорами, але того самого ефекту ви не побачите, що був у iOS 7 beta 1.

Паралакс ефект

А тепер погляньмо на паралакс. Це чудово нововведення, яке дозволяє іконкам та шпалерам на робочому екрані жити окремим життям один від одного. Шпалери знаходяться в одній площині, а іконки – в іншій. Гаджет на iOS 7 зчитує інформацію з гіроскопа і переміщає ці дві площини щодо один одного так, що в результаті переміщення ми бачимо ті частини зображення, які раніше були «за кадром». За рахунок цих маніпуляцій у користувача виникає відчуття глибини та багатовимірності.

Коли ми пояснили, що таке паралакс ефект і як він працює в iOS 7, стає зрозумілим, що такі визначення, як "Панорамні шпалери" або "Шпалери з паралаксом" вводять користувачів в оману. Адже з погляду розуміння процесу та російської мови, це різні функції, насправді ж – абсолютно однакова дія. Так звані "Панорамні шпалери" - це не що інше, як прості фото, які відрізняються від інших зображень тільки своїм дозволом.

Щоб отримати такі "Панорамні шпалери", користувачі буде достатньо зберегти будь-яке фото в потрібному роздільній здатності, а потім залити його на свій планшет, смартфон або плеєр з iOS. Якщо це не зробити або поставити фото, які використовувалися ще у шостій версії операційної системи, може з'явитися неприємний дефект з розтягуванням.

Дозволи для фото, якщо ви хочете отримати паралакс ефект на робочому екрані (у дужках ми вказали стандартний рекомендований дозвіл для фото без паралакс з шостою версією iOS):

  • Планшет Айпад 2 - 1424 х 1424 (1024 x 1024)
  • Айпад Міні - 1424 х 1424 (1024 х 1024)
  • Айпад 3 - 2448 х 2448 (2048 х 2048)
  • Айпад 4 - 2448 х 2448 (2048 х 2048)
  • Айфон 4S - 1360 х 1040 (960 х 640)
  • Айфон 5, 5S, 5C -1536 на 1040 (1136 х 640)
  • Айпод 5 покоління - 1536 на 1040 (1136 х 640)
  • Айфон 4 - не підтримує parallax (960 х 640)

Вже зараз багато людей займаються створенням різноманітних колекцій з такими заставками, є навіть програми «Динамічні та parallax заставки», через які можна завантажувати нові картинки. Але ми тепер знаємо, що все простіше, ніж здається. Такі програми - це чергова спроба зрубати грошей.

Як зробити картинки з таким ефектом?

Зробити все можна за допомогою редактора зображень. Найпопулярніший варіант – це, звичайно, Photoshop. Головне, що потрібно буде зробити - це вибрати правильну роздільну здатність, що підходить під ваш гаджет (вище ми написали всі дозволи під всі пристрої). Після того, як у вас є зображення з потрібною роздільною здатністю, вам потрібно буде залити його на пристрій одним із таких способів:

  1. Надіслати картинку самому собі на електронну пошту, а потім зберегти на фотоплівку;
  2. Завантажити на Dropbox та знову зберегти у фотогалерею;
  3. Завантажити за стандартною схемою через iTunes.
Як вимкнути паралакс?

Деяким користувачем це нововведення не подобається. Вимкніть його можна в налаштуваннях. Налаштування, потім "Основні", потім "Універсальний доступ", потім "Зменшення руху". Натискаємо на перемикач "Зменшення руху" - цим натисканням можна вимкнути пралакс.

Динамічні зображення

У оновлень iOS 7 з'явилися динамічні фотографії. Динамічні зображення можна встановити у налаштуваннях. Заходимо до Налаштувань, там знаходимо вкладку «Шпалери та яскравість», потім знаходимо там «Вибір шпалер» — Динамічні.Динамічні зображення відрізняються один від одного тільки кольором. на Наразі Apple пропонує лише 7 варіантів. Динамічні зображення дозволяють в реальному часі рухатися/змінювати прозорість/зменшуватися елементам шпалер.

Ідея використання паралаксу в дизайні мобільних програм не нова. Як і багато інших, вона прийшла до нас зі світу веб-дизайну, де спочатку стала дуже поширеним напрямом. Паралакс надає дизайну вражаючий ефект глибини і обсяг. На даний момент через деякі незручності, пов'язані зі специфікою розробки веб-додатків, мода на паралакс в оформленні сайтів стихла. Однак мобільні додатки- Це зовсім інша розмова. Паралакс в мобільному дизайніживе і поки не збирається нікуди йти, і навіть доданий за замовчуванням дизайн нової iOS 7 !

У цій статті ми розповімо вам про наш компонент DVParallaxView , і продемонструємо на прикладі його пристрою, як додати в додаток такий самий ефект паралакса, як і в home screen в iOS 7. І навіть краще.

Як влаштований паралакс?

Відвернемось ненадовго до суворого світу фізики, щоб краще зрозуміти і структурувати для себе механізм ефекту паралаксу. Це допоможе нам достовірно відтворити його на екрані телефону.

Отже, як працює паралакс? Суть його досить проста. Паралакс - це зміна положення одного і того ж об'єкта, що спостерігається з двох різних точок у просторі. Поспостерігати цей ефект у реальному світі можна будь-якої миті. Все, що вам знадобиться - це щось велике на роль фону (наприклад, стіна будинку) і об'єкт, що спостерігається на цьому тлі, що стоїть до вас ближче, ніж фон (наприклад ліхтарний стовп або дерево). Якщо ви йтимете вздовж стіни, спостерігаючи при цьому за ліхтарним стовпом, то вам здаватиметься, що ліхтарний стовп зміщується щодо стіни. Такий ефект і називається паралаксом - зсув стовпа, що здається, відносно стіни при переміщенні точки спостереження, тобто вас. При цьому чим ближче до вас буде стовп, тим вище здаватиметься швидкість його зміщення. І навпаки, якщо ви відійдете від стовпа на значну відстань і спробуєте пройтися вздовж стіни будинку знову - стовп практично не зміщуватиметься відносно стіни. Наші очі привчені оцінювати відстань до об'єктів за багатьма ознаками, і з них - це відносна швидкість зміщення об'єкта. Якщо ви спостерігаєте сцену, в якій об'єкти під час руху зміщуються з різною швидкістю- ваші очі відразу говорять вашому мозку, що об'єкти знаходяться на різній відстанівід вас. В цьому і полягає привабливість використання ефекту паралаксу в дизайні - зимитувавши його, ви додасте плоскій сцені глибину.

Отже, у практичному сенсі для нас ефект паралаксу полягає в тому, що об'єкти віддалені від вас на різну відстань зміщуються щодо вас із різною швидкістю. Причому ця швидкість знаходиться у зворотній залежності від вашої відстані до об'єктів. Якщо ви близько – швидкість об'єкта велика, якщо далеко – навпаки.

Давайте виділимо основні складові цього ефекту. По-перше, для яскраво вираженого паралаксу бажано мати фон, в ідеалі нерухомий, або зміщення якого в порівнянні з рештою об'єктів буде зневажливо мало. По-друге, спостерігати паралакс можна лише за наявності об'єктів, що наповнюють простір між фоном та точкою спостереження. А найголовніше в цих об'єктах - різниця їхньої віддаленості від вас. Іншими словами об'єкти повинні становити своєрідну ієрархію, шикуючись на різній відстані від точки огляду до фону. І, нарешті, по-третє, паралакс неможливий без руху об'єктів щодо точки спостереження з різною швидкістю.

За наявності всіх трьох основних моментів – фону, об'єктів та відносного руху – ми спостерігатимемо паралакс.

Parallax scrolling

Тепер, коли ми знаємо, як влаштований паралакс, нам потрібно визначитися, як саме ми втілюватимемо його в коді.

Найбільш очевидним підходом до реалізації паралаксу є parallax scrolling. Грали у старі ігри-платформери? Якщо так - то швидше за все зможете згадати, що поки персонаж втік із лівого кінця рівня в правий, об'єкти на задньому плані зміщувалися у зворотному напрямку з різною швидкістю залежно від передбачуваної дальності переднього плану. Ось посилання на вікіпедію, щоб ви точно пригадали, про що йдеться.

Parallax scrolling в іграх був влаштований таким чином, що сцена, яку ви спостерігаєте на екрані, складається з кількох шарів, на яких розташовані об'єкти. Залежно від передбачуваної відстані шару від екрану (шар "ліс" ближче до вас, ніж шар "хмари", які ближче до вас, ніж шар "сонце") шари зміщуються з тією чи іншою швидкістю. Це надає певному глибину, що відбувається на екрані, змушуючи плоску картинку виглядати об'ємніше. Не можна не визнати - такий підхід досить добре співвідноситься з тим, що ми дізналися про паралакс. Справді, можна подумки розбити простір між вами та тлом на шари, що містять об'єкти, що знаходяться у цьому просторі.

Логічно припустити, що реалізація ефекту паралаксу повинна бути інкапсульована в якийсь компонент-контейнер, що містить інші компоненти і має якусь ієрархію видів, положення яких буде зміщуватися на відстань, залежне від положення в ієрархії. Давайте замислимося, а чи немає елемента в UIKit, який містить подібну можливість? Звичайно є! Будь-який UIView містить ієрархію інших UIView, поміщених в нього методом addSubview:.

Тут ми підходимо до основної ідеї, покладеної в основу нашого компоненту DVParallaxView. Ідея полягає в тому, щоб компонент був нащадком UIView, що інкапсулює в собі ефект паралаксу. Сам ефект реалізовуватиметься передачею нового значення властивості contentOffset, що має тип CGPoint. Таким чином, DVParallaxView за своїм змістом є схожим на UIScrollView. При зміні значення contentOffset ми змінюватимемо розташування кожного view, що у ієрархії DVParallaxView. Величина усунення буде у зворотній залежності від віддаленості елемента від «верху» ієрархії. Оскільки елементи в масиві subviews зберігаються починаючи з нижнього в ієрархії (тобто з найдальшого від екрану), то зміщення перебуватиме у прямій залежності від індексу оброблюваного елемента при прямому проході масивом. У такий спосіб ми інтерпретуємо наявність «відстань» між елементами, як у реальному світі. Для контролю величини відстані ми виведемо в зовнішній інтерфейс властивість, що є множником, на який буде множитися індекс елемента в масиві. Задаючи його, ви завжди зможете підлаштувати величину паралаксу за своїм бажанням.

Що ж, запропонована модель виглядає життєздатною, всі основні моменти продумані. Тут ми можемо поставити крапку в знайомстві з концептуальним пристроєм паралакса в DVParallaxView і почати розповідь про його практичну реалізацію.

Створюємо DVParallaxView

У цій та наступній главах ми докладно розглянемо створення компонента DVParallaxView.

Перед тим, як приступити безпосередньо до реалізації, давайте визначимося ще з кількома властивостями класу DVParallaxView.

По-перше, паралакс найкраще виглядає і найчастіше робиться на тлі якої-небудь красивої картинки(Пам'ятаєте, ми визначилися, що однією з обов'язкових складових паралаксу є фон?). Тому в нашому класі необхідно передбачити можливість задати зображення фону. У самому корені ієрархії видів завжди буде приватний елемент класу UIImageView, який ми назвемо backgroundImageView. Цей елемент виконуватиме роль фону в DVParallaxView. Його розташування в корені ієрархії гарантуватиме нам найменше відносне зміщення, як і належить фоновому, найдальшому об'єкту сцени. Для передачі фонового зображенняУ громадському інтерфейсі компонента буде спеціальна властивість - backgroundImage класу UIImage.

По-друге, ефект паралаксу в iOS 7 складається не тільки зі зміщення заднього фону. Якщо придивитися краще, то можна помітити одну цікаву деталь: іконки зміщуються у бік, протилежний зсуву фону. Зроблено це для посилення ефекту паралаксу і контрасту між фоном, що зміщується, і іконками додатків, які на перший погляд нерухомі. Оскільки ми поставили за мету наздогнати і перегнати паралакс в iOS 7, ми просто зобов'язані додати таку можливість в наш компонент. Для цього ми заведемо в публічному інтерфейсі властивість frontView, в яку передаватимемо той вид, який ми хочемо зміщувати в протилежну від паралаксу сторону.

Отже, все приготування зроблено - теорія вивчена, пристрій компонента продумано. Можна приступати до створення DVParallaxView. Чи готові?

Створіть single-view проект у XCode, задайте йому ім'я та інші необхідні атрибути. Всередині проекту створіть клас DVParallaxView, який є нащадком класу UIView. Створіть заголовний файл DVParallaxView і заповніть його в такий спосіб.

#import @interface DVParallaxView: UIView @property (nonatomic, strong) UIImage *backgroundImage; @property (nonatomic, strong) UIView *frontView; @property (nonatomic) float parallaxDistanceFactor; @property (nonatomic) float parallaxFrontFactor; @property (nonatomic) CGPoint contentOffset; @end

Всі властивості класу, які ви тут бачите, ми вже обговорювали вище, тому їх набір не повинен вас нічим здивувати. Дві властивості, які не обговорювалися раніше в явному вигляді - parallaxDistanceFactor і parallaxFrontFactor - це ті самі множники, які служать для контролю величини усунення відповідно елементів ієрархії та фронтального вигляду.

У файлі реалізації класу створіть приватний інтерфейс. У нього потрібно помістити властивість backgroundImageView, оскільки класу нема чого надавати до нього публічний доступ.

@interface DVParallaxView() @property (nonatomic, strong) UIImageView *backgroundImageView; @end

Нехай об'єкт класу створюється викликом методу initWithFrame:. У його виклику необхідно виконати всю початкову конфігурацію.

- (id)initWithFrame:(CGRect)frame ( self = ; if (self) ( self.parallaxDistanceFactor = 2.f; self.parallaxFrontFactor = 20.f; self.backgroundColor = ; ; UIPanGestureRecognizer *panRecognizer = :@selector(panHandler:)] ; ) return self;

Ми задали такі значення множників, виходячи зі своїх особистих уподобань. Ви можете вибрати інші значення, якщо паралакс здасться вам занадто сильним або, навпаки, занадто слабким. Зауважте, що задній фонвід початку перебуває у ієрархії видів, навіть якщо зображення йому задано.

Якщо ви вже запитували «Як же ми ініціюватимемо зміщення видів у компоненті?», то відповідь на нього ви вже можете побачити в коді ініціалізатора — UIPanGestureRecognizer. Так, ми пам'ятаємо, що iOS 7 паралакс викликався нахилом телефону. Всьому свій час.

У UIPanGestureRecognizer було передано селектор методу panHandler:. Давайте одразу напишемо цей метод, щоб не забути зробити це згодом.

#pragma mark - Gesture handler - (void)panHandler:(UIPanGestureRecognizer *)pan ( CGPoint translation = ; ; ; )

Нічого незвичайного. Зчитуємо переміщення торкання і таку ж величину зміщення задаємо нашому DVParallaxView. Не забуваємо в кінці обнулити отримане усунення.

Тепер найцікавіше. Поки що зміни contentOffset нічого не відбувається, давайте це виправимо. Створіть метод сеттера setContentOffset, як показано нижче.

-(void)setContentOffset:(CGPoint)contentOffset ( BOOL backgroundReachedEdgeX = NO; BOOL backgroundReachedEdgeY = NO; double contentDivider; //1 if (self.backgroundImageView) ( contentDivider = self.subviews.count*self. (self.backgroundImageView.center.x + (contentOffset.x - _contentOffset.x)/contentDivider, self.backgroundImageView.center.y - (contentOffset.y - _contentOffset.y)/contentDivider); if ((newCenter.x - self .backgroundImageView.frame.size.width/2.f) > 0.f ||< self.bounds.size.width) { newCenter.x = self.backgroundImageView.center.x; backgroundReachedEdgeX = YES; } if ((newCenter.y - self.backgroundImageView.frame.size.height/2.f) >0.f ||< self.bounds.size.height) { newCenter.y = self.backgroundImageView.center.y; backgroundReachedEdgeY = YES; } self.backgroundImageView.center = newCenter; } // //2 for (int i = 1; i

(newCenter.y + self.backgroundImageView.frame.size.height/2.f)

Блок //2 - це прохід за всіма елементами ієрархії видів із розрахунком величин усунення їх центрів залежно від становища в ієрархії. Також, якщо по осях X або Y ми знаходимося у краю картинки заднього фону, то зміщення цих осей не відбудеться.

Основна логіка зміщення створена, залишилося небагато – задати методи доступу до основних властивостей, а також перевантажити метод addSubview.

#pragma mark - Getters -(UIImageView *)backgroundImageView ( if (!_backgroundImageView) ( _backgroundImageView = [ init]; _backgroundImageView.contentMode = UIViewContentModeCenter; _backgroundImageView.center = CGPointMake(CGRectGetMidX(self. ; ) return _backgroundImageView; ) #pragma mark - Setters -(void)setParallaxDistanceFactor: (float)parallaxDistanceFactor = MAX(0.f, parallaxDistanceFactor); actor = MAX(0 .f, parallaxFrontFactor); ) -(void)setBackgroundImage:(UIImage *)backgroundImage ( _backgroundImage = backgroundImage; ; CGPoint origin = CGPointMake(CGRectGetMidX(self.bounds) - backgroundImage.size.width/2.f, CGRect bounds) - backgroundImage.size.height/2.f); self.backgroundImageView.frame = (CGRect) (. _frontView = frontView; ) #pragma mark - Overriding -(void)addSubview:(UIView *)view ( if (self.frontView) ; else ; )

Давайте по порядку. З геттером для backgroundImageView все зрозуміло - звичайне lazy instantiation, створюємо об'єкт лише за потреби. При заданні значень ParallaxDistanceFactor та ParallaxFrontFactor автоматично здійсниться перевірка на негативні значення. Сеттер для backgroundImage задає зображення заднього фону backgroundImageView і одночасно центрує його положення на екрані. Сеттер frontView одночасно додає frontView в ієрархію підвидів, так що немає сенсу додавати його вручну. Нарешті, перевантажений метод addSubview: працює в звичайному режимі, якщо в DVParallaxView не визначено frontView, але якщо він визначений, то будь-який вид буде на позицію нижче за нього в ієрархії. Адже мається на увазі, що frontView завжди попереду.

Поки що зупинимося на цьому і перейдемо на головний viewController нашого тестового проекту. Настав час підключити наш новий компонент та перевірити його у справі. Так як ми хочемо бути схожими на новий home screen в iOS 7, то в тестовому проекті спробуємо відтворити саме його. Для цього нам потрібні картинка заднього фону (бажано із зображенням космосу) та іконки додатків. Більше того, оскільки наш компонент підтримує й інші об'єкти між фоном та переднім планом, ми додамо їх теж. Якщо фоном є космос, то ми розвинемо космічну тему і трохи оживимо пустельний космічний простір планетою Земля та її супутником - Місяцем. Усі необхідні зображення ви можете знайти в інтернеті або забрати з нашого тестового проекту на github.

У iOS 7 іконки програм є переднім планом, тому в DVParallaxView ми повинні розмістити їх у frontView. Для цього ми створимо UIView, до якого помістимо всі іконки. Щоб не займатися вручну створенням та розміщенням всіх цих компонентів, створіть контейнер та іконки у storyboard'і, потім підключивши їх до контролера.

Ось так виглядає передній вигляд у нашому тестовому додатку. Прив'яжіть UIView-контейнер як IBOutlet до контролера та назвіть його frontView. Давайте приступимо до створення екземпляра DVParallaxView.

Створіть властивість parallaxView у приватному інтерфейсі вашого контролера. Для цього властивості створіть геттер.

-(DVParallaxView *)parallaxView ( if (!_parallaxView) ( _parallaxView = [ initWithFrame:self.view.bounds]; [_parallaxView setBackgroundImage:]; UIImageView *earth = [ initWithImage:]; earth.frame = (CGRect) (.origin) = CGPointMake(CGRectGetMidX(self.view.bounds) - earth.image.size.width/2.f, CGRectGetMidY(self.view.bounds) - earth.image.size.height/2.f), .size = earth .frame.size);[_parallaxView addSubview:earth]; UIImageView *moon = [initWithImage:]; self.view.bounds) + 30.f), .size = moon.frame.size);[_parallaxView

У коді видно, як після створення екземпляра класу DVParallaxView йому задається тло «galaxy2», потім до ієрархії видів додаються зображення Землі та Місяця. Потім як передній план задається властивість frontView. Тепер все, що нам залишається, це додати наш компонент до ієрархії видів контролера. Додайте цей рядок у метод viewDidLoad:

;

Паралакс готовий, можна запускати проект. Як бачите створений нами компонент вже цьому етапі свого розвитку дає цілком достовірний ефект паралаксу.

Залишилася лише одна деталь. Поки що усунення елементів виконується дотиками. Час це виправити. Настав час підключити до DVParallaxView гіроскоп.

Підключаємо Core Motion

Якщо ви читали нашу статтю, то вже маєте всі необхідні навички для використання гіроскопа в цьому проекті, а також знаєте, що для підключення гіроскопа необхідно додати до проекту фреймворк Core Motion. Але як саме ми використовуватимемо дані з датчика? У проекті ми вибрали rotationRate для індикації нахилів телефону. Тобто contentOffset змінюватиметься за наявності ненульової кутової швидкості повороту.

Підключіть фреймворк до файлу реалізації класу DVParallaxView.

#import

Потім створіть властивості motionManager та displayLink у приватному інтерфейсі класу.

@property (nonatomic, strong) CMMotionManager *motionManager;

@property (nonatomic, strong) CADisplayLink *displayLink;

CMMotionManager - це основний клас CoreMotion, що використовується для доступу до даних із датчиків. CADisplayLink - таймер, що працює з частотою оновлення екрана, який викликатиме метод оновлення даних із гіроскопа.

Тепер додамо методи доступу нових властивостей.

-(CADisplayLink *)displayLink ( if (!_displayLink) ( _displayLink = ; ) return _displayLink; ) -(CMMotionManager *)motionManager ( if (!_motionManager) ( _motionManager = [ init]; _motionManager.deviceMotionUpdateInterval = 0.03f; ;)

Очевидно, що розробнику, який використовує компонент DVParallaxView, зовсім необов'язково завжди потрібно використовувати гіроскоп. Можливо, будуть інші умови та дії для зміни значення contentOffset. Тому компонент повинен надавати можливість вибору, чи потрібно керувати паралаксом через гіроскоп. Для надання цього вибору ми виведемо в публічний інтерфейс властивість gyroscopeControl, яка матиме тип BOOL. Якщо вона встановлена ​​в YES, компонент починає зчитувати показання з гіроскопа та зміщувати елементи ієрархії при нахилі пристрою. Якщо воно встановлено в NO, компонент припиняє реагувати на зміни кутової швидкості пристрою. При цьому властивості motionManager і displayLink повинні припиняти свою діяльність, щоб не забирати даремно ресурси процесора.

Як ми й домовилися, створіть у громадському інтерфейсі властивість gyroscopeControl.

@property (nonatomic, strong) BOOL gyroscopeControl;

Потім створіть для нього сетер.

-(void)setGyroscopeControl:(BOOL)gyroscopeControl ( if (_gyroscopeControl == gyroscopeControl) return; _gyroscopeControl = gyroscopeControl; if (gyroscopeControl) ( ; forMode:NSDefaultRunLoopMode]; ) else ( ; ) self.

Зауважте, що при установці властивості в YES motionManager починає отримувати показання з deviceMotion, а не з gyroscope. Причини такого вибору докладно описані у статті. При установці його в NO, одержання даних зупиняється, displayLink видаляється з усіх потоків викликом методу invalidate, а сам motionManager встановлюється в nil.

Тепер нам залишилося лише написати метод перетворення даних з гіроскопа на дані для contentOffset, а також реалізувати метод displayLinkHandler, який викликається в таймері displayLink.

#pragma mark - Gyroscope to offset - (CGPoint)contentOffsetWithRotationRate:(CMRotationRate)rotationRate ( double xOffset = (fabs(rotationRate.y) > DV_ROTATION_THRESHOLD)?rotationRate.y*DV_ROTATION_MULTIPLIER x) > DV_ROTATION_THRESHOLD)?rotationRate.x*DV_ROTATION_MULTIPLIER:0.f; )

Не забудьте на самому початку файлу реалізації описати дві define-константи, які ми використовували у роботі методу перетворення.

#define DV_ROTATION_THRESHOLD 0.1f

#define DV_ROTATION_MULTIPLIER 2.5f

У класі контролера під час створення об'єкта DVParallaxView задайте його властивість gyroscopeControl в YES.

Отже, гіроскоп підключений, дані з нього повинні тепер коректно перетворюватися на зміщення. Тепер можна скомпілювати проект та запустити його на пристрої. Здорово виглядає, чи не так? Зауважимо, що гіроскоп працюватиме лише на реальному пристрої.

Висновок

Якщо ви читаєте цей абзац, значить ви щойно створили окремий компонент з ефектом паралаксу, як у iOS 7. І навіть більше - ефект у компоненті DVParallaxView вийшов повнішим, оскільки зсуває не лише фон та передній план, а й усю ієрархію елементів між ними. Як бачите, його пристрій виявився зовсім не складним.

DVParallaxView був створений нами для вільного користування та викладений у нашому репозиторії. Користуйтеся, покращуйте, ми будемо раді вашим пропозиціям!

iOS 8 викликає дуже неоднозначну реакцію користувачів. Навіть якщо заплющити очі на , у ній досить нових функцій, які для багатьох виявилися зовсім непотрібними. Popular Mechanics склали список можливостей iOS-пристроїв, які вам, можливо, захочеться відключити. Ми розповімо, як це зробити.

Предиктивне введення
Всі, кому хоч раз доводилося писати більш-менш довгий текстанглійською з використанням нової клавіатурив iOS 8, напевно, оцінили зручність передиктивного введення і чекають його появи для російськомовної клавіатури. Однак, як з'ясувалося, якщо часто вводити свій пароль, передиктивна клавіатура одного разу може запропонувати вам його у відкритому вигляді, що дещо небезпечно. Зайдіть у налаштування, потім Основні, Клавіатура, та вимкніть передбачуваний набір. Інші функції клавіатури, що дражнять вас, відключаються в тому ж меню.

Airdrop
Фотографії та іншу інформацію ми надсилаємо часто. Як часто ми використовуємо для цього Airdrop? Особисто я за весь час його існування на iOS використав його двічі. Вимкніть його, і це може трохи допомогти зберегти заряд акумулятора. Робиться це просто. Відкрийте Центр керування, провівши пальцем знизу вгору, натисніть на Airdrop і вимкніть його.

Фонові оновлення
Автоматичне оновлення програм з App Store– безперечно зручна функція, але вона може спрацювати тоді, коли ми цього не хочемо. Є ймовірність, що не всі програми нам захочеться оновлювати. Це також негативно впливає на час автономної роботи пристрою. У розділі налаштувань « , App Store» ви можете вимкнути автоматичні оновленняі оновлювати програми вручну тоді, коли вам це буде найзручніше.

Голосові повідомлення
iMessage у iOS 8 дозволяє ділитися із співрозмовником не лише текстом, а й своїм голосом. Ці повідомлення автоматично видаляються, щоб ваша розмова не забирала надто багато пам'яті на пристрої, але якщо ви знаходите ці записи цінними, просто змініть час видалення аудіоповідомлень у розділі налаштувань «Повідомлення».

Паралакс
Помічали рух іконок та шпалер домашнього екрані iPhoneколи ви змінюєте кут нахилу? Ця функція з'явилася ще в iOS 7, але сенсу в ній, як ви можете здогадуватися, небагато. До того ж, її відключення може позитивно позначитися на продуктивності та часу автономної роботи. Якщо ви бажаєте вимкнути цей ефект, увімкніть зменшення руху в меню «Універсальний доступ» розділу «Основні».

Служби геолокації
Напевно ви звернули увагу на те, що багато програм бажають знати про ваше місцезнаходження. А скільком із них справді це корисно? Все б нічого, але визначення геолокації дуже суттєво забирає заряд акумулятора, тому список додатків, які можуть вимагати цю інформацію, варто було б скоротити. Зробити це можна в меню налаштувань «Конфіденційність» у розділі «Служби геолокації».

Оновлення контенту
Ще одна порада щодо збільшення часу автономної роботи. Відключивши фонове оновлення контенту в меню налаштувань «Основні» для деяких або всіх програм, ви допоможете своєму iPhone жити довше. Це рекомендується зробити для деяких особливо ненажерливих додатків на зразок Facebook.

Handoff
Ця функція дозволяє запустити програму на одному пристрої та продовжити користуватися на іншому пристрої. Handoff - дуже корисний і потужний інструмент для тих, хто вибрав собі екосистему пристроїв від Apple. Але що робити тим, хто володіє лише одним пристроєм, наприклад, iPhone чи iPad? Просто вимкнути цю непотрібну для себе функцію в меню налаштувань «Основні», відкривши розділ «Handoff та запропоноване програмне забезпечення».

Spotlight
Пошук Spotlightв iOS 8 був удосконалений і тепер здатний видати набагато більше інформації. Однак, якщо якісь дані в пошуковій видачі вам зовсім не потрібні, ви можете налаштувати Spotlight виходячи з власних вимог. Пошук налаштовується в тому ж розділі налаштувань «Основні».

Повідомлення
Не всі повідомлення від встановлених додатків є корисними. Деякі просто починають набридати. Непотрібні сповіщення можна вимкнути в однойменному розділі налаштувань. Ви також можете налаштувати віджети в центрі сповіщень, не виходячи з нього, натиснувши кнопку «Змінити».

У день презентації та , 22 жовтня, вийшло оновлення операційної системи iOS- 7.0.3. Одне з головних його нововведень - це можливість відключити горезвісний паралакс, через який багато користувачів скаржилися на погане самопочуття.

Пояснити, що таке паралакс в iOS, найпростіше цитатою з офіційної презентації Apple: «iOS 7 створює відчуття багатовимірності. Операційна система по максимуму використовує технології iPhone, iPad та iPod touchще більше розширити можливості iOS. Точні та функціональні шари створюють глибину та впорядковують контент. Напівпрозоре тло дає відчуття зв'язку з контекстом і місцем. А новий підхіддо анімації та руху робить найпростіші завдання набагато цікавішими».

Іншими словами, паралакс створює ілюзію 3D-глибини екрану. Отже, що потрібно зробити, щоб відключити паралакс?

  1. Заходимо в меню "Налаштування";
  2. Далі – «Основні»;
  3. Вибираємо "Універсальний доступ";
  4. Потім – зменшення руху.

Після цих дій користувач бачитиме звичайний плоский екран, і ніякі 3D-ефекти не підірвуть його здоров'я.

Корисною ця функція стане не тільки для тих, хто погіршує самопочуття після роботи зі смартфоном або планшетом. Користувачі iPhone 4/4S та старих моделей планшетників можуть відключити ефект на своєму пристрої, щоб підвищити продуктивність свого девайсу.