Подкласс UIView на карте для рисования линий - PullRequest
0 голосов
/ 18 мая 2011

У меня есть приложение, которое отображает пользовательские карты.Я использую CATiledView для отображения карт.

Я хотел бы иметь возможность рисовать маршрут поверх карт.Для этого я создаю UIView, затем добавляю его в scrollView после того, как добавляю слой листов следующим образом:

- (void)displayTiledImageNamed:(NSString *)imageName size:(CGSize)imageSize
{
    // clear the previous imageView
    [imageView removeFromSuperview];
    [imageView release];
    imageView = nil;
    [linesView removeFromSuperview];
    [linesView release];
    linesView = nil;

    // reset our zoomScale to 1.0 before doing any further calculations
    self.zoomScale = 1.0;

    // make a new TilingView for the new image
    imageView = [[TilingView alloc] initWithImageName:imageName size:imageSize];
    linesView = [[LinesView alloc]initWithImageName:imageName size:imageSize];

    linesView.backgroundColor = [UIColor clearColor];
    [self addSubview:imageView];
    [self addSubview:linesView];
    [self configureForImageSize:imageSize];


}

Проблема в том, что линия, которую я создаю в linesView, не масштабируется правильно.

Трудно описать, но создаваемая линия масштабируется так, как если бы она была нарисована на самом устройстве, а не нарисована на карте.См. Следующий код:

#import "LinesView.h"


@implementation LinesView
@synthesize imageName;


- (id)initWithImageName:(NSString *)name size:(CGSize)size
{
    if ((self = [super initWithFrame:CGRectMake(0, 0, size.width, size.height)])) {
        self.imageName = name;

    }

    return self;
}
- (void)dealloc
{
    [super dealloc];
}

- (void)drawRect:(CGRect)rect {
    CGContextRef context = UIGraphicsGetCurrentContext();

    CGContextSetRGBStrokeColor(context, 1, 0, 0, 1);
    CGContextSetLineWidth(context, 20.0);
    CGContextMoveToPoint(context, 1.0f, 220.0f);
    CGContextAddLineToPoint(context, 340.0f, 80);
    CGContextStrokePath(context);
}

@end

Я попытался поместить код для рисования линии в методе drawRect объекта tilingView, и он работает отлично.Ширина линии составляет 20 пикселей относительно карты.В просмотре линий эта строка имеет ширину 20 пикселей относительно устройства и расположена относительно вида прокрутки.

Извините, я изо всех сил пытаюсь описать проблему ...

1 Ответ

0 голосов
/ 18 мая 2011

Понял это - я добавил linesView в tilingView вместо scrollView так:

- (void)displayTiledImageNamed:(NSString *)imageName size:(CGSize)imageSize
{
    // clear the previous imageView
    [imageView removeFromSuperview];
    [imageView release];
    imageView = nil;
    [linesView removeFromSuperview];
    [linesView release];
    linesView = nil;

    // reset our zoomScale to 1.0 before doing any further calculations
    self.zoomScale = 1.0;

    // make a new TilingView for the new image
    imageView = [[TilingView alloc] initWithImageName:imageName size:imageSize];
    linesView = [[LinesView alloc]initWithImageName:imageName size:imageSize];

    linesView.backgroundColor = [UIColor clearColor];
    [self addSubview:imageView];
    [imageView addSubview:linesView];
    [self configureForImageSize:imageSize];


}
...