我在更改 MKAnnotationView 子类中的图像视图时遇到了一些问题。我有一个计时器,它根据用户在某个点的位置数据更新注释位置。这可以正常工作,并且注释位置已正确更新。我使用以下代码执行此操作:
[_myAnnotation setCoordinate:point.position];
在此之下,我还计算用户是向东还是向西。如果用户向东,我调用类setIsMovingRight:YES
上的方法MyAnnotation
,并在用户向西时执行相反的操作。
我已经通过在方法内部使用 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];
}
我将不胜感激任何人可以提供的任何帮助或建议。谢谢!