Градиент фона: линейный слева направо в объективе C
Мой клиент хочет фоновый режим Просмотр с этим эффектом градиента фона Градиент: rgb (118,118,118) | #ffffff | RGB (198,198,197) линейный слева направо Я пробовал этот путь, но это происходит в вертикальном направлении, я хочу это в горизонтальном направлении
UIColor *leftColor = [UIColor colorWithRed:118.0/255.0 green:118.0/255.0 blue:118.0/255.0 alpha:1.0];
UIColor *middleColor = [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0];
UIColor *rightColor = [UIColor colorWithRed:198.0/255.0 green:198.0/255.0 blue:197.0/255.0 alpha:1.0];
// Create the gradient
CAGradientLayer *theViewGradient = [CAGradientLayer layer];
theViewGradient.colors = [NSArray arrayWithObjects: (id)leftColor.CGColor, (id)middleColor.CGColor,(id)rightColor.CGColor, nil];
theViewGradient.frame = self.view.bounds;
//Add gradient to view
[self.view.layer insertSublayer:theViewGradient atIndex:0];
4 ответа
Решение
Вам нужно установить свойства startPoint и endPoint для вашего градиентного слоя. Они представляют начальные координаты вашего первого цвета и координаты конца вашего последнего цвета.
Они оба являются CGPoints, и их x и y должны иметь значения между 0.0 и 1.0.
По умолчанию начальная точка имеет эти координаты (0,5, 0,0), в то время как конечная точка имеет эти координаты (0,5, 1,0).
(0.0, 0.0) - верхний левый угол, а (1.0, 1.0) - нижний правый угол.
так что постарайтесь:
theViewGradient.startPoint = CGPointMake(0.0, 0.5);
theViewGradient.endPoint = CGPointMake(1.0, 0.5);
В Swift 3.0 и 4.0
gradientLayer.startPoint = CGPoint(x: 0.0, y: 0.5)
gradientLayer.endPoint = CGPoint(x: 0.0, y: 0.5)
**The start and end points of the gradient when drawn into the layer's
coordinate space. The start point corresponds to the first gradient
stop, the end point to the last gradient stop. Both points are
defined in a unit coordinate space that is then mapped to the
layer's bounds rectangle when drawn. (i.e. [0,0] is the bottom-left
corner of the layer, [1,1] is the top-right corner.).The default values
are [.5,0] and [.5,1] respectively.**
theViewGradient.startPoint = CGPointMake(0.0, 0.5);
theViewGradient.endPoint = CGPointMake(1.0, 0.5);
enum GradiantDirection {
case leftToRight
case rightToLeft
case topToBottom
case bottomToTop
}
class func setGradiantColor(view : UIView, topColor : UIColor, bottomColor:UIColor, cornerRadius : CGFloat = 0.0,gradiantDirection : GradiantDirection = .topToBottom )
{
view.layer.sublayers?.filter{ $0 is CAGradientLayer }.forEach{ $0.removeFromSuperlayer() }
let gradient: CAGradientLayer = CAGradientLayer()
gradient.colors = [topColor.cgColor,bottomColor.cgColor]
gradient.frame = view.bounds
switch gradiantDirection {
case .topToBottom:
gradient.startPoint = CGPoint(x: 0.0, y: 0.0)
gradient.endPoint = CGPoint(x: 0.0, y: 1.0)
case .bottomToTop:
gradient.startPoint = CGPoint(x: 1.0, y: 0.5)
gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
case .leftToRight:
gradient.startPoint = CGPoint(x: 0.0, y: 0.5)
gradient.endPoint = CGPoint(x: 1.0, y: 0.5)
case .rightToLeft:
gradient.startPoint = CGPoint(x: 1.0, y: 0.5)
gradient.endPoint = CGPoint(x: 0.0, y: 0.5)
}
gradient.masksToBounds = true
let gradientLayer = CAGradientLayer()
gradientLayer.cornerRadius = cornerRadius
gradient.rasterizationScale = 100
view.layer.insertSublayer(gradient, at: 0)
}