2015-02-23 54 views
1

CAGradientLayer滾動我試圖凌駕添加一個UIScrollView的CAGradientLayer到邊緣淡出人們的透明度。用的UIScrollView

梯度是正確的,但面具我添加移動的UIScrollView滾動時。

我已經嘗試提交CATransaction但它仍然沒有成功。

- (void)layoutSubviews 
{ 
    [super layoutSubviews]; 

    [CATransaction begin]; 
    [CATransaction setValue:(id)kCFBooleanTrue forKey:kCATransactionDisableActions]; 

    NSObject * transparent = (NSObject *) [[UIColor colorWithWhite:0 alpha:0] CGColor]; 
    NSObject * opaque = (NSObject *) [[UIColor colorWithWhite:0 alpha:1] CGColor]; 

    CAGradientLayer* hMaskLayer = [CAGradientLayer layer]; 
    hMaskLayer.opacity = .7; 
    hMaskLayer.colors = [NSArray arrayWithObjects:transparent, opaque, opaque, transparent, nil]; 
    hMaskLayer.locations = [NSArray arrayWithObjects:[NSNumber numberWithFloat:0.0], 
         [NSNumber numberWithFloat:0.2], 
         [NSNumber numberWithFloat:0.8], 
         [NSNumber numberWithFloat:1.0], nil]; 
    hMaskLayer.startPoint = CGPointMake(0, 0.5); 
    hMaskLayer.endPoint = CGPointMake(1.0, 0.5); 
    hMaskLayer.bounds = self.bounds; 
    hMaskLayer.anchorPoint = CGPointZero; 

    self.layer.mask = hMaskLayer; 

    [CATransaction commit]; 
} 

回答

2

我增加移動時的UIScrollView滾動

並不奇怪,因爲該層的位置是基於其superlayer的界限,界限是什麼變化的時候,面具滾動。

簡單的解決方案:把滾動視圖放在超級查看中,大小完全相同,並且屏蔽表示超級視圖的圖層。