Аннотация добавлена ​​в UIImageView не в правильном положении после увеличения, содержащего UIScrollView - PullRequest
2 голосов
/ 28 июня 2011

У меня есть UIScrollView.Поверх этого я поместил UIImageView с изображением в нем.Теперь я добавил еще один UIView поверх этого представления UIImage.В этом UIView я хотел бы добавить Аннотации .Поэтому я хотел бы иметь возможность нажимать один палец в течение 3 секунд, а затем там, где я нажал палец, должна появиться какая-то иконка.Идея состоит в том, что этот значок отображается поверх изображения, установленного в ImageView.

Теперь проблема заключается в том, что когда я увеличиваю изображение, установленное в представлении изображения пользовательского интерфейса, значок каким-то образом переставляется, но это не так.остается в исходном положении.

Пример: я хочу загрузить изображение кости, где есть область, которая может быть раком.Если я знаю, добавьте значок аннотации в положение, где, по моему мнению, может быть рак, и измените масштаб костей после этого, значок больше не будет в том месте, где я его изначально пометил.

Кто-нибудь знает, что янужно сделать?

Извлечение кода из UIView, где я хотел бы нарисовать значки аннотаций

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

    //DRAW PIN IMAGE
    if(clickPosition.x > 0){
        NSLog(@"REACHED...");
        UIImage *pin = [UIImage imageNamed:@"Icon_Annotation10.png"];
        CGRect pinrect = CGRectMake(clickPosition.x, clickPosition.y, 30, 30);    
        CGContextDrawImage(contextRef, pinrect, pin.CGImage);//draws image in context
    }
}

Настройки для ScrollView

// settings for scroll view
scrollView.contentSize = CGSizeMake(imageView.frame.size.width, imageView.frame.size.height);
scrollView.maximumZoomScale = 4.0;
scrollView.minimumZoomScale = 0.75;
scrollView.clipsToBounds = YES;
scrollView.userInteractionEnabled = YES;
scrollView.delegate = self;
scrollView.scrollEnabled = NO;

Ответы [ 2 ]

4 голосов
/ 28 июня 2011

Полагаю, вам нужно умножить clickPosition.x и clickPosition.y на масштаб увеличения.

Вы можете получить масштаб, применив следующий метод UIScrollViewDelegate

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale

scale в этом контексте будет значением между установленными вами минимальными значениями ZoomScale и Maximum ZoomScale.

Затем вам нужно передать это виду, которое рисует булавку. Вероятно, лучшим способом было бы иметь свойство zoomScale в представлении, а затем в вышеописанном методе делегата установить это свойство в новое значение масштаба и перерисовать содержимое представления.

0 голосов
/ 10 июня 2014

Вот как я это сделал, используя указания micpringle:

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(double)scale{
    NSLog(@"finished zooming");

    NSLog(@"position x :%f",pin1.frame.origin.x);
    NSLog(@"position y :%f",pin1.frame.origin.y);


    CGRect frame = pin1.frame;
    frame.origin.x = pin1.frame.origin.x * scale;
    frame.origin.y = pin1.frame.origin.y * scale;
    pin1.frame = frame;

    NSLog(@"position x new :%f",pin1.frame.origin.x);
    NSLog(@"position y new:%f",pin1.frame.origin.y);

}
...