我正在尝试在MapKit中模拟用户位置动画(用户的位置由脉动的蓝点表示)。我已经创建了MKAnnotationView的自定义子类,并且在drawRect方法中,我试图循环一组颜色。这是我正在做的更简单的实现:
- (void)drawRect:(CGRect)rect {
float magSquared = event.magnitude * event.magnitude;
CGContextRef context = UIGraphicsGetCurrentContext();
if (idx == -1) {
r[0] = 1.0; r[1] = 0.5; r[2] = 0;
b[0] = 0; b[1] = 1.0; b[2] = 0.5;
g[0] = 0.5; g[1] = 0; g[2] = 1.0;
idx = 0;
}
// CGContextSetRGBFillColor(context, 1.0, 1.0 - magSquared * 0.015, 0.211, .6);
CGContextSetRGBFillColor(context, r[idx], g[idx], b[idx], 0.75);
CGContextFillEllipseInRect(context, rect);
idx++;
if (idx > 3) idx = 0;
}
不幸的是,这只会使注释成为3种不同颜色中的一种,并且不会循环通过它们。有没有办法强制MKAnnotations不断重绘,使其看起来像动画?
答案 0 :(得分:4)
您可以随时在注释视图上调用setNeedsDisplay
,只要您想重绘它即可。最简单的方法是让注释视图本身设置一个每隔1/60秒左右触发一次的计时器。
更复杂的方法是将您的绘图代码放入自定义CALayer
并将重复的Core Animation动画应用于它。有关方法,请参阅my answer to "Animating a custom property of CALayer subclass"。