在nsscrollview上绘制nsiamgeview时错误的位置?

时间:2013-11-08 07:11:51

标签: objective-c macos cocoa nsscrollview nsimageview

我有一个NSScrollview里面有一个很大的imageview。我正在尝试以编程方式在nsscrollview内的imageview上绘制一个imageview。 想象一下。我在NSScrollView中有一个世界地图(NSImageView)。用户从下拉列表中选择一个国家,我在worldmap(NSImageview)中获得该国家的(x,y)点。 现在我必须在给定(x,y)点的世界地图上绘制一个小图像(红色指针)。 问题是,当我绘制图像时,它会被绘制在错误的区域。

    self.pimg = [[NSImageView alloc] initWithFrame:NSMakeRect (0, 0, 30, 30)];
    [self.pimg setImage: image];
//self.pimg is the pointing image to be drawn over the worldmap
    [self.pimg setImageFrameStyle:NSImageFrameNone];
    [self.pimg setImageScaling:NSOnState];
//
    [self.scrollView.contentView addSubview:self.pimg];

我输入(0,0)为x,y以检查它是否在原点上绘制。它被绘制在屏幕中间的某处。

编辑:它会在scrollview的原点绘制。如何将这些点转换为大图像的点?

2 个答案:

答案 0 :(得分:1)

将您的图像作为子视图添加到worldmapimage(大图像视图)。这将根据您的世界地图图像转换图像点。

 self.pimg = [[NSImageView alloc] initWithFrame:NSMakeRect (0, 0, 30, 30)];
 [self.pimg setImage: image];
//self.pimg is the pointing image to be drawn over the worldmap
  [self.pimg setImageFrameStyle:NSImageFrameNone];
  [self.pimg setImageScaling:NSOnState];

  //Updated line of code
  [self.largeImageView addSubview:self.pimg]; //Add subview to the largeimageview(world map)

答案 1 :(得分:1)

根据您提供的信息很难说,但您可以尝试使用NSView方法

- (NSRect)convertRect:(NSRect)aRect toView:(NSView *)aView

因此,假设您的世界地图是滚动视图中的子视图,也许......

[scrollview convertRect:self.pimg.frame toView:worldmap]

将在世界地图视图的点参照系中返回一个帧。