2014-07-09 9 views
8

sto cercando di replicare questo al momento:di replica Google Search iOS schede di animazione

enter image description here

Se si ha familiarità con app di Google, sembra che un UICollectionView con un layout flusso personalizzato.

Sto espandendo una domanda che è stata chiusa con un po 'di codice aggiuntivo.

Here's the link to the other question.

Nella classe layout di flusso personalizzato, posso creare un effetto "pila" impostando un valore interlinea minimo negativo, e utilizzando il seguente:

- (NSArray *)layoutAttributesForElementsInRect:(CGRect)rect 
{ 
    NSArray *allAttributesInRect = [super layoutAttributesForElementsInRect:rect]; 

    CGPoint centerPoint = CGPointMake(CGRectGetMidX(self.collectionView.bounds), CGRectGetMidY(self.collectionView.bounds)); 

    for (UICollectionViewLayoutAttributes *cellAttributes in allAttributesInRect) 
    { 
     if (CGRectContainsPoint(cellAttributes.frame, centerPoint)) 
     { 
      cellAttributes.transform = CGAffineTransformIdentity; 
      cellAttributes.zIndex = 1.0; 
     } 
     else 
     { 
      cellAttributes.transform = CGAffineTransformMakeScale(0.75, 0.75); 
     } 
    } 

    return allAttributesInRect; 
} 

La strisciata eliminare animazioni stanno funzionando bene, ma ho problemi a creare l'aspetto "impilato" e quindi trascinare solo 1 cella nella vista, mantenendo le carte rimanenti impilate, come quello che vedi sopra.

+0

hey. Sto cercando di replicare lo stesso effetto, anche se con poco successo. Ho bisogno che le carte facciano parte di un UICollectionView/UITableView in modo che l'utente possa scorrere più di alcune carte come google. Ma posso assicurarti che il modo in cui Google ha creato quell'app non è con una vista di insieme. Ho controllato l'app in Reveal e fondamentalmente hanno fatto l'animazione usando solo viste. tuttavia ho anche bisogno di una vista colletion e l'unico modo in cui posso vederlo è avere due layout in cui è possibile animare la transizione. ci vuole molto più tempo anche se – alex

+0

Un video o una gif dell'effetto che stai cercando ti aiuterà a ottenere una risposta. – Segev

risposta

0

Vedo due parti a questa vista. 1. Una pila di "carte" & 2. Una tabella di pile. Rompenderlo in questo modo lo rende molto più facile da gestire.

Dovrebbe essere piuttosto semplice inoltrare la sottoclasse UIView per creare una "scheda" (lo chiamerò UICardView) che è possibile trascinare. Creare uno "stack" di questi non dovrebbe essere troppo difficile. Vedo che la parte più difficile di questo sarebbe aggiungere in modo efficiente un'ombra esterna.

La seconda parte include molte parti mobili: l'aggiunta di queste pile a un tavolo. In realtà, la tabella viene utilizzata per lo scorrimento uniforme e la spaziatura coerente e, in effetti, è completamente trasparente. Dovresti calcolare l'altezza per ogni pila di "carte" per heightForRowAtIndexPath:.

Questo approccio consente uno scorrimento uniforme, un ingombro della memoria relativamente basso e un elevato grado di personalizzazione con relativa facilità. Inoltre, questi pezzi più piccoli dovrebbero essere facili da mantenere e aggiungere funzionalità.

Problemi correlati