Я пытаюсь применить градиент угла к тире, созданному с кодом, написанным внутри пользовательского класса UIView, как показано ниже. Хотя он нуждается в настройке, я доволен результатами, которые он производит до сих пор.Градиент угла градиента ядра для датчика
Учитывая входные параметры в окне просмотра инициализации (ниже), и рамки 768 * 768 на IPad в AIR2 в портретном режиме, он производит следующий калибр:
Что я бы как сделать, чтобы заставить каждую из тире перейти через определяемый пользователем градиент, например зеленого до красного, так же, как это (kludged в Photoshop):
Я искал высоко и низко, и не может найти что-нибудь для достижения этой цели. Единственное, что близко подходит, использует разные методы рисования, и я хочу сохранить рутину рисования.
Насколько я понимаю, я должен просто быть в состоянии назвать:
CGContextSetStrokeColorWithColor (myContext, [градиент цвета идет здесь])
внутри цикла дро, и это все, но я не знаю, как создать соответствующий цветовой массив/градиент и изменить цвет чертежа линии в соответствии с индексом в этот массив.
Любая помощь будет высоко оценена.
- (void)drawRect:(CGRect)rect {
myContext = UIGraphicsGetCurrentContext();
UIImage *gaugeImage = [self radials:300 andSteps:3 andLineWidth:10.0];
UIImageView *gaugeImageView = [[UIImageView alloc] initWithImage:gaugeImage];
[self addSubview:gaugeImageView];
}
-(UIImage *)radials:(NSInteger)degrees andSteps:(NSInteger)steps andLineWidth:(CGFloat)lineWidth{
UIGraphicsBeginImageContext(self.bounds.size);
myContext = UIGraphicsGetCurrentContext();
CGContextSetLineWidth(myContext, lineWidth);
CGContextSetStrokeColorWithColor(myContext, [[UIColor blackColor] CGColor]);
CGPoint center = CGPointMake(self.bounds.origin.x+(self.bounds.size.width/2), self.bounds.origin.y+(self.bounds.size.height/2));
CGFloat r1 = center.x * 0.87f;
CGFloat r2 = center.x * 0.95f;
CGContextTranslateCTM(myContext, center.x, center.y);
CGContextBeginPath(myContext);
CGFloat offset = 0;
if(degrees < 360){
offset = (360-degrees)/2;
}
for(int lp = offset + 0 ; lp < offset + degrees+1 ; lp+=steps){
CGFloat theta = lp * (2 * M_PI/360);
CGContextMoveToPoint(myContext, 0, 0);
r1 = center.x * 0.87f;
if(lp % 10 == 0){
r1 = center.x * 0.81f;
}
CGContextMoveToPoint(myContext, sin(theta) * r1, cos(theta) * r1);
CGContextAddLineToPoint(myContext, sin(theta) * r2, cos(theta) * r2);
CGContextStrokePath(myContext);
}
UIImage *image = UIGraphicsGetImageFromCurrentImageContext();
UIGraphicsEndImageContext();
return image;
}
Не злоупотреблять 'drawRect' подобное. 'drawRect' предназначен для рисования - не для добавления subviews. Помните, что 'drawRect' вызывается много раз, и вы просто добавляете этот subview снова и снова, что смешно. – matt
Точка снята! Виноват! – Max