2013-07-11 37 views
10

我与iOS SDK试验和我有以下UIView结构:移动上滚动的CALayer的面具在滚动型

  • UIView
    • UIImageView - 只有一个背景图像
    • UIImageView(用CALayer面具)
    • UIScrollView
      • Label

结构很简单,UIScrollView是透明层和第二UIImageView上有一个掩模。我想要做的是CALayer掩码会根据滚动视图中内容的位置来移动它的位置。如果用户滚动,则应更新掩码的位置。

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

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

面膜在viewDidLoad创建视图控制器的生命周期内不会改变:我已经使用UIScrollView的代表解决了这个问题。

问题是,掩码位置更新太慢。这样,它看起来面具是跟随滚动视图的内容,而不是滚动它。正确调用scrollViewDidScroll委托方法。

为了更好地理解问题,我附上了我在iOS模拟器中制作的视频。 http://www.youtube.com/watch?v=w3xRl3LTngY

所以,问题是:

有没有一种方法,使面膜更新更快,这是iOS版的限制吗?

回答

16

CALayer的是隐式动画像位置的一些属性尝试禁用它们:

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

大,解决了这个问题。非常感谢你。现在面具位置变化更加流畅。 – Legoless