Градиентная заливка в CAGradientLayer - PullRequest
0 голосов
/ 20 января 2020

enter image description here

Мне нужно заполнить CAGradientLayer радиальной заливкой, чтобы получить результат, подобный приведенному выше

Вот мой код, который я пробовал

CAGradientLayer *gradientLayer = [CAGradientLayer layer];
gradientLayer.frame = self.bounds;
gradientLayer.colors = @[(id)[UIColor blueColor].CGColor, (id)[UIColor greenColor].CGColor];
//    gradientLayer.type = kCAGradientLayerRadial;

По этому коду я получаю следующий код:

enter image description here

Если есть какое-либо решение, пожалуйста, ответьте

Заранее спасибо

1 Ответ

2 голосов
/ 21 января 2020

Это может быть близко к тому, что вы хотите. Это пользовательский IB_DESIGNABLE вид, поэтому вы можете увидеть его в IB / Раскадровке.


SanjayView.h

//
//  SanjayView.h
//
//  Created by Don Mag on 1/21/20.
//

#import <UIKit/UIKit.h>

NS_ASSUME_NONNULL_BEGIN

IB_DESIGNABLE
@interface SanjayView : UIView

@end

NS_ASSUME_NONNULL_END

SanjayView.m

//
//  SanjayView.m
//
//  Created by Don Mag on 1/21/20.
//

#import "SanjayView.h"

@interface SanjayView ()
@property (strong, nonatomic) CAGradientLayer *gLayer;
@end

@implementation SanjayView

- (instancetype)initWithFrame:(CGRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (instancetype)initWithCoder:(NSCoder *)coder
{
    self = [super initWithCoder:coder];
    if (self) {
        [self commonInit];
    }
    return self;
}

- (void)prepareForInterfaceBuilder
{
    [super prepareForInterfaceBuilder];
    [self commonInit];
}

- (void)commonInit {

    self.backgroundColor = [UIColor clearColor];

    if (!_gLayer) {
        _gLayer = [CAGradientLayer new];
        [self.layer addSublayer:_gLayer];
    }

    _gLayer.type = kCAGradientLayerRadial;

    _gLayer.startPoint = CGPointMake(0.5, 0.5);
    _gLayer.endPoint = CGPointMake(1.0, 1.0);

    _gLayer.colors = @[
        (id)[UIColor whiteColor].CGColor,
        (id)[UIColor blueColor].CGColor,
        (id)[UIColor colorWithRed:0.0 green:0.5 blue:0.0 alpha:1.0].CGColor,
        (id)[UIColor greenColor].CGColor,
        (id)[UIColor clearColor].CGColor,
    ];

    _gLayer.locations = @[
            [NSNumber numberWithFloat:0.7],
            [NSNumber numberWithFloat:0.72],
            [NSNumber numberWithFloat:0.75],
            [NSNumber numberWithFloat:0.9],
            [NSNumber numberWithFloat:0.95],
    ];

}

- (void)layoutSubviews {
    [super layoutSubviews];
    _gLayer.frame = self.bounds;
}

@end

Результат в IB:

enter image description here

Примечание: синий цвет, который вы видите является фоном представления viewController. Фактический SanjayView имеет четкий фон.

Поиграйте с цветами и местами, пока не получите желаемый результат.

...