Я хочу дать своему видеопроигрывателю эффект градиента вверху и внизу представления. Я использую для этого следующий способ, но он не дает более плавного эффекта, т.е. создает две белые горизонтальные линии в обеих конечных точках рисунка.
Фактически, я создал подкласс UIView
, который использует CAGradientLayer
в качестве своего уровня. Я сделал это, чтобы слой следовал ориентации супервизора, и он отлично работает. Для справки см. этот ответ
Вот подкласс UIView
под названием GradientView
GradientView.h
@interface GradientView : UIView
@property (nonatomic, strong, readonly) CAGradientLayer *layer;
@end
GradientView.m
@implementation GradientView
@dynamic layer;
+ (Class)layerClass {
return [CAGradientLayer class];
}
@end
Экземпляр:
IBOutlet GradientView *viewControls;
Используйте это:
-(void)applyGradientEffect
{
UIColor *endColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.90];
UIColor *centerColor = [UIColor clearColor];
viewControls.layer.colors = [NSArray arrayWithObjects:
(id)[endColor CGColor],
(id)[centerColor CGColor],
(id)[centerColor CGColor],
(id)[endColor CGColor],
nil];
viewControls.layer.startPoint = CGPointMake(0.5, 1.0);
viewControls.layer.endPoint = CGPointMake(0.5, 0.0);
}
Я также пробовал использовать свойство locations
для CAGradientLayer
вместо свойств startPoint
и endPoint
, что-то вроде следующего фрагмента кода. Тем не менее, это недостаточно плавно.
viewControls.layer.locations = [NSArray arrayWithObjects:
[NSNumber numberWithFloat:0.0f],
[NSNumber numberWithFloat:0.2],
nil];
Эффект градиента будет более плавным, только если я использую только 2 цвета снизу вверх, как в следующем коде. (Он создаст эффект градиента только по нижнему краю, мне нужен такой эффект как сверху, так и снизу)
-(void)applyGradientEffect
{
UIColor *endColor = [UIColor colorWithRed:0 green:0 blue:0 alpha:0.90];
UIColor *centerColor = [UIColor clearColor];
viewControls.layer.colors = [NSArray arrayWithObjects:
(id)[endColor CGColor],
(id)[centerColor CGColor],
nil];
viewControls.layer.startPoint = CGPointMake(0.5, 1.0);
viewControls.layer.endPoint = CGPointMake(0.5, 0.0);
}
В чем может быть причина? В этом случае это поведение по умолчанию? Я что-то не так делаю с рисованием?