2015-02-23 5 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 и границы именно то, что меняется, когда прокрутки.

Простое решение: поместите вид прокрутки в супервизор с точно такими же размерами и маской , что и надводный слой.

Смежные вопросы