CAGradientLayer с углом

Я рисую CGPath, который не является прямоугольником или квадратом, и добавляю CGPath к CAShapeLayer. Кадр этого CAShapeLayer получен от CGPath с использованием CGPathGetBoundingBox(path). Так что это будет прямоугольник или квадрат. Теперь я хочу установить цвет градиента для слоя, но мой путь не является прямоугольником или квадратом, поэтому он не распределяет цвет градиента равномерно по всему CGPath. Есть ли способ установить цвет градиента на CGPath или как установить цвет градиента с углом?

Пожалуйста, обратитесь к снимку экрана, чтобы понять ситуацию. Здесь белый цвет обозначает рамку CGPath, а зеленый цвет — это наша нарисованная CGPath. В нижней части CGPath вы можете видеть белый цвет градиента, который неравномерно распределен в CGPath.

введите здесь описание изображения

введите здесь описание изображения


person h999    schedule 26.08.2013    source источник
comment
если я правильно понял ваш вопрос, эта ссылка поможет вам stackoverflow.com/a/422208/1059705   -  person Bala    schedule 26.08.2013
comment
Итак, вы пытаетесь сказать, что я должен использовать свойство местоположения. Это правильно?   -  person h999    schedule 26.08.2013
comment
Я не уверен, просто попробуйте..   -  person Bala    schedule 26.08.2013
comment
это моя единственная часть шестиугольника, что, если я изменю его на пятиугольник? Я ценю ваш ответ, но он не более общий. Я не могу передавать статические значения...   -  person h999    schedule 26.08.2013
comment
Можете ли вы добавить другое изображение, показывающее, что вы хотели бы увидеть? Я не уверен, что вы подразумеваете под равномерным распределением здесь.   -  person jrturton    schedule 26.08.2013
comment
@jrturton Я хочу установить цвет градиента для полигонального слоя. Первое изображение (Слой 1), которое является моей частью шестиугольника. Теперь на втором изображении вы можете понять мою проблему. Зеленый цвет - это рамка слоя 2, а белый цвет - рамка слоя. 1. Если я хочу установить цвет градиента, я должен использовать свойства startPoint и endPoint. Но если полигон изменился, то это не будет полезно. Я хочу установить цвет градиента так же, как слой 2. вы можете видеть, что на слое 2 он выглядит хорошо. то же самое, что я хочу в слое 1, но для этого мне нужно установить его под углом 60. Итак, как я могу это сделать? пожалуйста, помогите мне...   -  person h999    schedule 26.08.2013
comment
Вы имеете в виду, что хотите, чтобы переход цвета в слое 1 (который представляет собой горизонтальную линию, пересекающую слово «слой 2» в слое 2) проходил посередине слоя и под углом в слое 1? Можете ли вы показать свой текущий код рисования - вы используете CAGradientLayer или рисуете градиент в drawRect?   -  person jrturton    schedule 26.08.2013
comment
Точно. Вот мой код: CAShapeLayer *shapeLayer = [CAShapeLayer layer]; [shapeLayer setPath: self.path]; CAGradientLayer *gradientLayer = [Слой CAGradientLayer]; градиентный слой.startPoint = CGPointMake(0.5,0.5); градиентный слой.конечная точка = CGPointMake(0.0,0.0);   -  person h999    schedule 26.08.2013
comment
CGRect rect = CGPathGetPathBoundingBox(self.path); gradientLayer.frame = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height/2); градиентLayer.borderWidth = 0,2; градиентLayer.bounds = CGRectMake(rect.origin.x, rect.origin.y, rect.size.width, rect.size.height/2);;   -  person h999    schedule 26.08.2013
comment
UIColor * glossColor1 = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.35];UIColor * glossColor2 = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:0.1];gradientLayer.borderColor = glossColor2.CGColor;NSMutableArray * colors = [[NSMutableArray alloc]initWithObjects:(id)glossColor1.CGColor,(id)[glossColor2 CGColor], nil]; градиентный слой.цвета = цвета; [gradientLayer setMask:shapeLayer]; [самостоятельно добавить подслой: градиентный слой];   -  person h999    schedule 26.08.2013
comment
Пожалуйста, отредактируйте свой вопрос, чтобы включить этот код, не размещайте его в комментариях, где никто не может его прочитать.   -  person jrturton    schedule 27.08.2013


Ответы (1)


Начальная и конечная точки линейного градиента указываются в пунктах относительно всего размера слоя, с (0,0) вверху слева и (1,1) внизу справа.

Поэтому, чтобы сделать линейный градиент под углом, вам просто нужно правильно установить начальную и конечную точки. Например, если вы использовали (0,0) и (1,1) в качестве начальной и конечной точек, градиент будет идти от верхнего левого угла к нижнему правому под углом 45 градусов.

Следовательно, определение конкретных начальных и конечных точек для ваших нужд — это всего лишь вопрос тригонометрии.

person jrturton    schedule 26.08.2013