2013-08-25 9 views
6

Capisco che il titolo sia un po 'confuso quindi farò del mio meglio per spiegarlo bene. Ho un UIView che ha una larghezza fissa di 100, e un'altezza variabile che inizia da 0. Quello che voglio essere in grado di fare è trascinare il dito dalla base di UIView, verso la parte superiore dello schermo, e l'UIView cambia la sua altezza/si estende alla posizione del mio dito. Se è ancora complicato, immaginalo come una striscia di carta strappata da qualcosa.Cambiare l'altezza di UIView in risposta al trascinamento del dito

Se puoi aiutare, sarebbe davvero fantastico. Non penso che dovrebbe essere troppo difficile, ma sono solo un principiante e posso capire se non l'ho spiegato bene!

+0

Vorrei rendere la vista sempre a tutta altezza, ma avere un CALayer all'interno della vista che cambia di altezza. –

+0

Come potrei fare per farlo? – user2397282

+0

Hai guardato i riconoscitori di gesti? – Wain

risposta

9

Questo dovrebbe essere diretto con un UIPanGestureRecognizer e un po 'di matematica. Per modificare la visualizzazione al telaio corretta (sto usando il nome _viewToChange, consentendo di sostituire che con la vostra vista in seguito), è sufficiente aggiungere:

UIPanGestureRecognizer * pan = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(pan:)]; 
pan.maximumNumberOfTouches = pan.minimumNumberOfTouches = 1; 
[self addGestureRecognizer:pan]; 

al metodo init per la vista super, e definire il metodo:

- (void)pan:(UIPanGestureRecognizer *)aPan; { 
    CGPoint currentPoint = [aPan locationInView:self]; 

    [UIView animateWithDuration:0.01f 
        animations:^{ 
        CGRect oldFrame = _viewToChange.frame; 
        _viewToChange.frame = CGRectMake(oldFrame.origin.x, currentPoint.y, oldFrame.size.width, ([UIScreen mainScreen].bounds.size.height - currentPoint.y)); 
        }]; 
} 

Questo dovrebbe animare la vista mentre il dito dell'utente si sposta. Spero possa aiutare!

+0

Funziona, grazie! Sai come potrei aggiungere un massimo e un minimo all'altezza della vista? – user2397282

+0

Inoltre, c'è un altro piccolo problema. Il codice funziona, ma funziona indipendentemente da dove tocchi lo schermo. Questo è un po 'un problema perché avrò 3 di questi. C'è un modo in cui puoi cambiarlo in modo che funzioni solo per una certa vista quando lo tocchi? – user2397282

+0

Un massimo e un minimo sono abbastanza facili. Si noti che l'unico punto che conta è 'currentPoint.y'. Assicurandosi che 'currentPoint.y' sia all'interno di un intervallo (usando le funzioni' MAX' e 'MIN') otterrai il risultato desiderato. Come per la vista che si desidera selezionare, basta guardare il 'currentPoint.x', e capire dove si trova. Se è a sinistra (meno di 1/3 della larghezza dello schermo), usa la prima vista. Se è nel mezzo, usa la seconda vista, ecc. – msgambel

Problemi correlati