2013-07-11 15 views
10

ich mit iOS SDK am Experimentieren und ich habe folgendes UIView Struktur:Verschieben CALayer Maske auf blättern in einem Scroll

  • UIView
    • UIImageView - nur ein Hintergrundbild
    • UIImageView (mit einem CALayer Maske)
    • UIScrollView
      • Label

sehr einfache Struktur, ist UIScrollView transparente Schicht und die zweite UIImageView weist eine Maske auf ihr. Was ich versuche zu tun ist, dass die CALayer Maske ihre Position entsprechend der Position des Inhalts in der Bildlaufansicht verschiebt. Wenn der Benutzer scrollt, sollte die Position der Maske aktualisiert werden. Ich löste dieses Problem bereits durch UIScrollView ‚s Delegierten mit:

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

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

Maske ist in viewDidLoad erstellt und ändert sich nicht während der View-Controller-Lebenszyklus.

Das Problem ist, dass die Aktualisierung der Maskenposition zu langsam ist. So sieht es aus, dass die Maske dem Inhalt der Bildlaufansicht folgt und nicht mit ihr scrollt. Die Delegatenmethode scrollViewDidScroll wird ordnungsgemäß aufgerufen.

Damit Sie das Problem besser verstehen, füge ich ein Video an, das ich im iOS-Simulator erstellt habe. http://www.youtube.com/watch?v=w3xRl3LTngY

Die Frage ist also:

Gibt es eine Möglichkeit Maske Aktualisierung schneller zu machen oder dies ist die Grenze von iOS?

Antwort

16

CALayer sind implizite animierte für einige Eigenschaften wie Position versuchen, sie zu deaktivieren:

- (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

Große, das Problem behebt. Vielen Dank. Änderungen der Maskenposition sind jetzt viel flüssiger. – Legoless