Tôi đang cố gắng tạo thanh tải hình tròn và muốn sử dụng Đồ họa lõi thay vì che hình ảnh để tạo hiệu ứng. Tuy nhiên, tôi không nhận được sự trung thực mà tôi đã hy vọng: Làm mịn đường cong đồ họa cốt lõi
Không có vấn đề gì tôi đã thử, các jaggies có vẻ khá xấu. Antialiasing đang bật và tôi đã thử chuyển "flatness" xuống .1 trên CGContextRef
. Hình ảnh là từ trình mô phỏng (Retina), có vẻ như hơi tốt hơn trên thiết bị nhưng vẫn không tuyệt vời như vậy.
Vẽ mã, trong một lớp con của 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);
}
này đồ họa Core tốt nhất có thể làm hay tôi thiếu một cái gì đó là?
Xem xét hình ảnh của bạn rõ ràng đã được thu nhỏ bằng 2 trong mỗi thứ nguyên và bạn lấy hình ảnh từ trình mô phỏng Retina, tôi sẽ nói có vấn đề với biến đổi lớp của bạn hoặc một trong các bậc cha mẹ của nó. Bạn đang tạo 'ctx' trong một số phương pháp khác hay là khung công tác chuyển nó cho bạn? Đầu ra của 'NSLog ("% @ "là gì, [[[UIApplication sharedApplication] keyWindow] recursiveDescription])'? –
Ngữ cảnh được cung cấp cho tôi bởi CALayer. [Ở đây] (http://pastebin.com/0Gjkxh2a) là đầu ra của 'recursiveDescription'. 'KDGoalBar' là lớp con UIControl đang được đặt trong và' KDGoalBarPercentLayer' là nơi bản vẽ thực tế đang được thực hiện. – Kevin