Próbuję utworzyć okrągły pasek ładowania i chcę użyć Core Graphics zamiast maskować obrazy, aby uzyskać efekt. Jednak nie dostaję wierności, na którą liczyłem: Wygładzanie krzywych grafiki rdzenia
Bez względu na to, co próbowałem, strzępy wydają się bardzo złe. Antyaliasing jest włączony i już próbowałem zmienić "płaskość" na .1 na CGContextRef
. Obraz pochodzi z symulatora (Retina), wygląda nieco lepiej na urządzeniu, ale nadal nie jest świetny.
Rysunek kodu wewnątrz podklasy CALayer:
-(void)drawInContext:(CGContextRef)ctx {
CGPoint center = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);
CGFloat delta = toRadians(360 * percent);
CGFloat innerRadius = 69.5;
CGFloat outerRadius = innerRadius + 12;
CGContextSetFillColorWithColor(ctx, [UIColor colorWithRed:99/256.0 green:183/256.0 blue:70/256.0 alpha:.5].CGColor);
CGContextSetStrokeColorWithColor(ctx, [UIColor colorWithRed:99/256.0 green:183/256.0 blue:70/256.0 alpha:10.0].CGColor);
CGContextSetLineWidth(ctx, 1);
CGMutablePathRef path = CGPathCreateMutable();
CGPathAddRelativeArc(path, NULL, center.x, center.y, innerRadius, -(M_PI/2), delta);
CGPathAddRelativeArc(path, NULL, center.x, center.y, outerRadius, delta - (M_PI/2), -delta);
CGPathAddLineToPoint(path, NULL, center.x, center.y-innerRadius);
CGContextAddPath(ctx, path);
CGContextFillPath(ctx);
CGContextAddPath(ctx, path);
CGContextStrokePath(ctx);
}
Jest to najlepsze rdzeń graficzny może zrobić albo ja czegoś brakuje?
Biorąc pod uwagę, że obraz został wyraźnie przeskalowany o 2 w każdym wymiarze, a wykonałeś zdjęcie z symulatora Retina, powiedziałbym, że jest problem z przekształceniem twojej warstwy lub jednego z jej rodziców. Czy tworzysz 'ctx' w jakiejś innej metodzie, czy też jest to framework, który je przekazuje? Jaki jest wynik działania 'NSLog ("% @ ", [[[UIApplication sharedApplication] keyWindow] recursiveDescription])'? –
Kontekst jest mi dany przez CALayer. [Tutaj] (http://pastebin.com/0Gjkxh2a) jest wynikiem działania 'recursiveDescription'. 'KDGoalBar' jest podklasą UIControl, w której jest umieszczana, a' KDGoalBarPercentLayer' jest tam, gdzie jest wykonywany faktyczny rysunek. – Kevin