Как получить смещение движения параллакса, аналогичное домашнему экрану iOS 7 с поддержкой iOS 6?

Я прочитал здесь, что iOS 7 предлагает простой способ получить смещения параллакса движения. Но это также показывает, что вы должны применить его к UIView.

Мне это нужно для чего-то другого (алгоритм рисования). Что бы вы сделали, чтобы получить чистое смещение движения параллакса CGPoint, если бы вы не хотели создавать скрытый вид только для получения значения?

И как я могу получить это смещение движения параллакса, чтобы оно также работало с iOS 6?


person openfrog    schedule 24.11.2013    source источник
comment
ВЫ МОЖЕТЕ ИСПОЛЬЗОВАТЬ ЭТО github.com/Przytua/UIView-MWParallax   -  person Kunal Balani    schedule 24.11.2013
comment
он также работает для iOS 6   -  person Kunal Balani    schedule 24.11.2013
comment
Спасибо @KunalBalani, но мне нужно что-то, что НЕ требует настройки UIView. Мне просто нужно необработанное значение смещения параллакса для другой цели. Подумайте о контроллере. UIView-MWParallax — это категория в UIView, которая работает только с UIView. Чтобы получить смещение параллакса, мне пришлось бы создать фиктивный вид, а затем запросить его положение.   -  person openfrog    schedule 24.11.2013
comment
Преобразование ссылок кода @KunalBalani из категории UIView в независимый объект выглядит довольно тривиально. Просто измените его на собственный класс, посмотрите, что не удается скомпилировать, и немного подчистите. Единственным важным изменением будет замена настроек transform точкой в ​​motionsUpdated, но опять же, это довольно тривиально. Это, безусловно, выглядит как хорошая отправная точка.   -  person Rob Napier    schedule 24.11.2013
comment
Использовать акселерометр или Motion API и использовать CATransform3D на растрированном слое в соответствии с обновлениями, запускаемыми датчиками?   -  person topLayoutGuide    schedule 08.01.2014


Ответы (1)


Этот ответ опоздал на 3 года.

Но вы можете создать подкласс UIMotionEffect и переопределить keyPathsAndRelativeValues(forViewerOffset:) и реализовать любой эффект, который вы хотите применить к представлению, в зависимости от позиции просмотра зрителя.

Параметр viewerOffset предоставляет экземпляр UIOffset, который даст вам смещение просмотра средства просмотра. Вам нужно вернуть словарь с keyPaths в качестве ключей и соответствующими значениями, которые вы вычисляете на основе viewerOffset в качестве значений для любого из анимируемых свойств представления.

import UIKit

class CustomMotionEffect: UIMotionEffect {

    override func keyPathsAndRelativeValues(forViewerOffset viewerOffset: UIOffset) -> [String : Any]? {
        var motionEffectDictionary = [String : Any]()

        //Horizontal
        if viewerOffset.horizontal > 0 { //Device tilted right

        } else if viewerOffset.horizontal < 0 { //Device tilted leftß

        } else {//Device horizontally perpendicular

        }

        //Vertical
        if viewerOffset.vertical > 0 { //Device tilted down

        } else if viewerOffset.vertical < 0 { //Device tilted up

        } else { //Device vertically perpendicular

        }
        return motionEffectDictionary
    }

}

Это обеспечит контроль над тем, как должен вести себя ваш эффект. Но это не будет работать на iOS6.

person Vishal V. Shekkar    schedule 16.12.2016