Application iPhone ultravisual comme UIView ou UITableView scroll

Quelqu'un peut-il me donner un indice sur la façon de recréer l'effet de défilement utilisé dans l'application iPhone UltraVisual? Voici un gif pour illustrer l'effet:

entrez la description de l'image ici

La première "cell" est pleine hauteur tandis que les autres cellules affichées sont de taille normale. Pendant que l'user fait défiler vers le haut, la première cellule s'anime lentement à la hauteur normale, tandis que la suivante s'agrandit lentement. Est-ce qu'ils utilisent un UITableView? Ou un UIScrollView? Je n'ai aucune idée de comment c'est fait …

Ha, tu as fait ma journée! J'ai effectivement écrit cette vue 🙂

C'est en fait très simple. Cette vue utilise UICollectionView avec un UICollectionViewLayout personnalisé.

Le principe général est celui-ci. Je compose un «intervalle de traînée» – c'est la distance requirejse pour glisser entre chaque cellule. Cette valeur est arbitraire mais affecte la quantité de données que l'user doit faire glisser pour changer de cellule. La hauteur totale de la vue de collection est l'intervalle de traînée * le nombre d'éléments dans la vue. Ensuite, je règle la layout pour paginer automatiquement à l'intervalle de traînée le plus proche (ce qui lui donne le comportement d'accrochage). Ceci est très similaire à comment fonctionne Coverflow. À partir de là, vous pouvez calculer l'indice de la «cellule supérieure» en divisant le paramètre contentOffset.y par la hauteur.

Avec l'index «cellule supérieure», vous pouvez générer les frameworks de chaque cellule assez facilement. La trame de la cellule supérieure est {0, contentOffset.y, 320, 176}, et à partir de là, vous pouvez calculer la trame de cellules suivante et ainsi de suite.

Ensuite, la dernière astuce consiste à calculer l'interpolation de l'index de la page. C'est essentiellement la partie décimale de l'index de cellules actuel. Cela donnera un nombre entre 0 et 1 qui peut être utilisé pour calculer l'interpolation entre le cadre supérieur et le cadre ci-dessous.

Chaque 'prepareLayout' calcule les frameworks des cellules à l'écran, puis, dans layoutAtsortingbutesForElementsInRect:, génère tous les attributes layoutAtsortingbutes en fonction des frameworks générés.

En utilisant cette astuce, vous pouvez créer toutes sortes de dispositions compliquées. UICollectionView peut être une bête puissante, mais cela prend certainement un peu de time pour envelopper votre tête.

C'est vraiment cool! Nous avons fait un contrôle assez simple à utiliser comme celui-ci qui peut être trouvé ici:

https://github.com/RobotsAndPencils/RPSlidingMenu