2010-07-13 11 views

risposta

1

Utilizzare le animazioni di UIView.

È un po 'lungo spiegare, quindi spero che questo piccolo esempio chiarisca un po' le cose. sguardo al documantation per ulteriori istruzioni

[UIView beginAnimations: nil context: NULL]; 
[UIView setAnimationDuration: 2]; 
[UIView setAnimationDelegate: self]; 
[UIView setAnimationDidStopSelector: @selector(revertToOriginalDidStop:finished:context:)]; 

expandedView.frame = prevFrame; 

[UIView commitAnimations]; 

E 'da un progetto che sto attualmente lavorando su, quindi è un po' particolare, ma spero si possono vedere le basi.

0

Ho avuto fortuna con questo metodo in una sottoclasse UIScrollView:

- (void)zoomToRect:(CGRect)rect duration:(NSTimeInterval)duration 
{ 
    [self setZoomLimitsForSize:rect.size]; 

    if (duration > 0.0f) { 
     [UIView beginAnimations:nil context:NULL]; 
     [UIView setAnimationBeginsFromCurrentState:YES]; 
     [UIView setAnimationDuration:duration]; 
    } 
    [self zoomToRect:rect animated:NO]; 
    if (duration > 0.0f) 
     [UIView commitAnimations]; 

    [self zoomToRect:rect animated:(duration > 0.0f)]; 
} 

È un po 'barare, ma sembra funzionare per lo più. A volte fallisce, ma non so perché. In questo caso, ritorna alla velocità di animazione predefinita.

+2

Stavo premendo questo caso "occasionalmente non funziona", che fa sì che l'animazione venga eseguita con una durata predefinita. Questo caso sembra verificarsi quando le dimensioni rect precedenti e di destinazione corrispondono, anche se le origini sono diverse. Ecco il mio nuovo codice di animazione, aggiungendo la linea scrollRectToVisible e non sto più colpendo questo caso di errore. [UIView animateWithDuration: 2 ritardo: 0 opzioni: UIViewAnimationOptionBeginFromCurrentState animazioni:^{ [scrollView scrollRectToVisible: target animated: NO]; [scrollView zoomToRect: target animated: NO]; } completamento: nil]; – fionbio

+0

fieno il suo grande nous !!! Funzionante bene Grazie –

0

In realtà queste risposte sono molto simili a quello che ho finito usando, ma le posterò separatamente perché è diverso. Fondamentalmente lo zoomToRect non funziona correttamente se lo zoom di destinazione è uguale a quello attuale.

Si potrebbe provare a scrollToRect ma non ho avuto fortuna con quello.

Invece basta usare contentOffset e impostarlo su zoomRect.origin e nidificare nel blocco di animazione.

[UIView animateWithDuration:duration 
         delay:0.f 
        options:UIViewAnimationOptionCurveEaseInOut 
       animations:^{ 
    if (sameZoomScale) { 
     CGFloat offsetX = zoomRect.origin.x * fitScale; 
     CGFloat offsetY = zoomRect.origin.y * fitScale; 

     [self.imageScrollView setContentOffset:CGPointMake(offsetX, offsetY)]; 
    } 
    else { 
     [self.imageScrollView zoomToRect:zoomRect 
           animated:NO]; 
    } 
       } 
       completion:nil]; 
Problemi correlati