2013-07-11 66 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