我正在尝试为我的TableViewCell创建一个循环指示器,类似于Apple Mail应用程序中的电子邮件被标记为未读时。
我有以下代码:
var Indicator = CAShapeLayer()
var IndicatorSize: CGFloat = 10
// standard blue color
let blueColor = UIColor(red: 0, green: 122.0/255.0, blue:1.0, alpha:1)
// create circular CAShapeLayer
Indicator.bounds = CGRect(x:0, y:0, width:IndicatorSize, height:IndicatorSize)
Indicator.position = CGPoint(x: 10, y: 10)
Indicator.cornerRadius = Indicator.frame.size.width/2
// add as cell sublayer
cell.layer.addSublayer(Indicator)
虽然这似乎可以完成这项工作,但这个圈子并不像邮件应用程序那样平滑,角落几乎看起来像素化。我不确定这是因为我使用的是CAShapeLayer。我想知道是否有更好的选择。
我也可以将它作为单元格的对象,而不仅仅是一个图层,以便我可以使用cell.Indicator调用它吗?
答案 0 :(得分:4)
拿一个UIView
。对drawRect:
方法进行子类化并在其中绘制UIBezierPath
。
类似的东西:
@implementation BlueCircleView
- (void)drawRect:(CGRect)rect
{
[[UIColor blueColor] setFill];
// Assuming your view as the size of the dot you want.
// Otherwise, simply pass another rect.
UIBezierPath *round = [UIBezierPath bezierPathWithOvalInRect:self.bounds];
[round fill];
}
@end
答案 1 :(得分:3)
class CircleView: UIView {
override func drawRect(rect: CGRect) {
let context = UIGraphicsGetCurrentContext()
self.tintColor.setFill()
CGContextFillEllipseInRect(context, rect)
}
}