在包含UIScrollView的缩放后,添加到UIImageView的注释位置不正确

时间:2011-06-28 08:42:14

标签: ios objective-c cocoa-touch uiscrollview core-graphics

我有UIScrollView。最重要的是,我在其中添加了一个带有图像的UIImageView。现在我在这个UIImage视图的顶部添加了另一个UIView。在这个UIView上我想添加一些注释。所以我希望能够按下一根手指3秒钟,然后在我按下手指的位置会出现某种图标。想法是这个图标显示在ImageView中设置的图像上。

现在的问题是,当我缩放已在UI图像视图中设置的图像时,图标会以某种方式重新排列,但它不会停留在原来的位置。

示例:我想加载骨骼的图片,其中有一个可能是癌症的区域。如果我知道将注释图标添加到我认为可能存在癌症并且之后重新缩放骨骼的位置,则该图标不再位于我最初标记它的位置。

有谁知道我必须做什么?

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 个答案:

答案 0 :(得分:4)

我相信你需要将zoomPosition.x和clickPosition.y乘以缩放比例。

您可以通过实施以下UIScrollViewDelegate方法来获得比例

- (void)scrollViewDidEndZooming:(UIScrollView *)scrollView withView:(UIView *)view atScale:(float)scale
此上下文中的

scale 将是minimumZoomScale&之间的值。你设置的maximumZoomScale。

然后,您需要将其传递到绘制引脚的视图。最好的方法可能是在视图上有一个 zoomScale 属性,然后在上面的委托方法中将该属性设置为新的缩放值并重新绘制视图的内容。

答案 1 :(得分:0)

这就是我使用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);

}