2010-04-21 5 views
3

MapKit에서 사용자 위치 애니메이션을 시뮬레이션하려고합니다 (사용자의 위치는 파란 점으로 표시됨). 나는 MKAnnotationView의 커스텀 서브 클래스를 만들었고 drawRect 메소드에서 나는 일련의 색상들을 순환하려고 시도하고있다. 여기에 내가 뭘하는지의 간단한 구현이다 :사용자 정의 된 애니메이션 MKAnnotationView를 만들 수 있습니까?

- (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가 애니메이션으로 표시되도록 계속 다시 그리도록 강제하는 방법이 있습니까?

답변

4

다시 그리려 할 때마다 언제든지 setNeedsDisplay을 주석보기에 호출 할 수 있습니다. 이를 수행하는 가장 쉬운 방법은 1/60th 초마다 타이머를 설정하는 주석보기 자체 일 것입니다.

더 복잡한 방법은 도면 코드를 사용자 정의 CALayer에 넣고 반복 코어 애니메이션 애니메이션을 적용하는 것입니다. 접근법에 대해서는 my answer to "Animating a custom property of CALayer subclass"을 참조하십시오.

+0

감사합니다.

[NSTimer scheduledTimerWithTimeInterval:0.25 target:self selector:@selector(setNeedsDisplay) userInfo:nil repeats:YES];
을 추가하면 CALayer 제안을 확실히 살펴 보겠습니다. – smountcastle

관련 문제