2013-07-11 12 views
10

sto sperimentando con iOS SDK e ho la seguente UIView struttura:Moving maschera CALayer sul rotolo in uno Scrollview

  • UIView
    • UIImageView - solo un'immagine di sfondo
    • UIImageView (con un CALayer maschera)
    • UIScrollView
      • Label

Molto semplice struttura, è UIScrollView strato trasparente e secondo UIImageView ha una maschera su di esso. Quello che sto cercando di fare è che la maschera CALayer sposterebbe la sua posizione in base alla posizione del contenuto nella visualizzazione di scorrimento. Se l'utente scorre, la posizione della maschera deve essere aggiornata. Ho già risolto questo problema utilizzando UIScrollView 's delegato:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 
    CGPoint contentOffset = scrollView.contentOffset; 
    contentOffset.y = -contentOffset.y; 

    self.overlayImageView.viewlayer.mask.position = contentOffset; 
} 

maschera viene creato in viewDidLoad e non cambia durante il ciclo di vita vista del controllore.

Il problema è che l'aggiornamento della posizione della maschera è troppo lento. In questo modo sembra che la maschera segua il contenuto della vista di scorrimento, non scorrendo con esso. Il metodo delegato scrollViewDidScroll viene chiamato correttamente.

Per capire meglio il problema, allego un video che ho realizzato con il simulatore iOS. http://www.youtube.com/watch?v=w3xRl3LTngY

Quindi la domanda è:

C'è un modo per rendere l'aggiornamento maschera più veloce o questo è il limite di iOS?

risposta

16

CALayer sono implicite animato per alcune proprietà come la posizione tenta di disattivare loro:

- (void)scrollViewDidScroll:(UIScrollView *)scrollView 
{ 

[CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 
CGPoint contentOffset = scrollView.contentOffset; 
contentOffset.y = -contentOffset.y; 

self.overlayImageView.viewlayer.mask.position = contentOffset; 
[CATransaction commit]; 

} 
+1

Grande, risolve il problema. Grazie mille. Le modifiche alla posizione della maschera sono ora molto più fluide. – Legoless