2012-07-18 2 views
0

MKAnnotationView 하위 클래스 내부에서 이미지보기를 변경하는 데 문제가 있습니다. 사용자가 특정 지점에 있었던 위치에 대한 데이터를 기반으로 주석 위치를 업데이트하는 타이머가 있습니다. 이것은 잘 작동하고 주석 위치가 올바르게 업데이트됩니다. 나는 다음과 같은 코드를 사용하여이 작업을 수행 : 사용자가 서쪽으로가는되었는지 여부를이 아래MKMapKit의 이미지 변경 MKAnnotation 서브 클래스

[_myAnnotation setCoordinate:point.position];

는 또한 계산한다. 사용자가 동쪽으로 향하고 있다면 MyAnnotation 클래스에서 setIsMovingRight:YES 메서드를 호출하고 사용자가 west로 향하고있는 경우와 반대의 작업을 수행합니다.

값이 변경 될 때마다 메서드 내에서 NSLog를 사용하여 올바른 값으로 올바른 값으로 메서드를 호출하고 있음을 확인했습니다. 그러나 setIsMovingRight 메서드가 주석의 시각적 모양에 영향을 미치지 않는 것처럼 보입니다. 메서드가 호출 될 때마다 imageview의 배경색을 빨간색으로 설정하려고했지만이 경우에도 아무 효과가 없습니다. 난 성공하지 않고 여러 곳에서 setNeedsDisplay를 호출 해 보았습니다.

주석보기를 추가하고 다시 만들 수 있지만 위치가 변경 될 때마다 주석이 깜박입니다. 실제로보기에는 좋지 않습니다.

다음은 내 맞춤 주석보기 "MyAnnotation"코드입니다.

@interface MyAnnotation : MKAnnotationView <MKAnnotation> 
{ 
    UIImageView *_imageView; 
    BOOL _currentlyMovingRight; 
} 

@property (nonatomic) CLLocationCoordinate2D coordinate; 
@property (nonatomic, copy) NSString *title; 
@property (nonatomic, copy) NSString *subtitle; 

@property (nonatomic,retain) UIImage *image; 

-(void)setIsMovingRight:(BOOL)movingRight; 

@end 

@implementation MyAnnotation 

@synthesize coordinate, title, subtitle, image; 

-(id)initWithAnnotation:(id<MKAnnotation>)annotation reuseIdentifier:(NSString *)reuseIdentifier 
{ 
    self = [super initWithAnnotation:annotation reuseIdentifier:reuseIdentifier]; 
    if(self) 
    { 
     _currentlyMovingRight = NO; 
     _imageView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"right.png"]]; 
     [self addSubview:_imageView]; 
    } 
    return self; 
} 

-(void)setIsMovingRight:(BOOL)movingRight 
{ 
    _imageView = [[UIImageView alloc] initWithFrame:CGRectMake(0, 0, 30, 30)]; 
    [_imageView setBackgroundColor:[UIColor redColor]]; // THIS LINE NEVER DOES ANYTHING. 

    if(movingRight && !_currentlyMovingRight) 
    { 
     NSLog(@"right now."); 
     [_imageView setImage:[UIImage imageNamed:@"right.png"]]; 
    } 
    else if (!movingRight && _currentlyMovingRight) 
    { 
     NSLog(@"left now."); 
     [_imageView setImage:[UIImage imageNamed:@"left.png"]]; 
    } 
    _currentlyMovingRight = movingRight; 

    [self addSubview:_imageView]; 
    [self setNeedsDisplay]; 
} 

누구나 제공 할 수있는 도움이나 조언을 보내 주시면 감사하겠습니다. 감사!

답변

1

주석 뷰는 KVO를 사용하여 변경 사항을 수신 대기한다고 생각합니다. image 속성을 변경해 보셨습니까? 예 : [self setImage:myNewImage]

관련 문제