首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSImageView绘图不正确

NSImageView绘图不正确
EN

Stack Overflow用户
提问于 2011-05-29 02:29:06
回答 2查看 449关注 0票数 0

为了控制2 NSView,我创建了一个定制的NSImageViews子类。创建图像的代码如下:

代码语言:javascript
复制
- (id)initWithFrame:(NSRect)frameRect AndMap:(NSImage *)map AndPlayer:(NSImage *)guyImage
{
    self = [super initWithFrame:frameRect];
    if (self)
    {
        NSRect newRect = NSMakeRect(0.0, 0.0, 64.0, 64.0);

        NSImageView *theMap = [[NSImageView alloc] initWithFrame:NSMakeRect(0.0, 0.0, frameRect.size.width, frameRect.size.height)];
        [theMap setImage:map];

        NSImageView *theGuy = [[NSImageView alloc] initWithFrame:newRect];
        [theGuy setImage:guyImage];

        [self setMapImage:theMap];
        [self setPlayerView:theGuy];
        [self addSubview:[self mapImage]];
        [self addSubview:[self playerView]];

然而,当我告诉视图用原点(128,0)在rect中绘制时,它用奇怪的偏移来绘制theMap,这样but的原点是128,0,而地图的原点是(128,20)。我找不到发生这种事的任何理由。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-29 03:03:36

我猜你有重叠的兄弟视图:

  • theMap有帧{{0.0, 0.0}, {frameRect.size.width, frameRect.size.height}}
  • theGuy有帧{{0.0, 0.0}, {64.0, 64.0}}
  • theMaptheGuy都是(或者似乎是)添加到相同的superview中,即self,并且具有相同的起源。

可可不能保证对重叠的兄弟视图有正确的行为,即两个视图具有相同的直接superview,其相应的帧重叠。来自视图编程指南

注意:由于性能原因,Cocoa不强制执行兄弟视图之间的裁剪,或者在兄弟视图重叠时保证正确的失效和绘图行为。如果您希望在另一个视图前面绘制视图,则应将前面视图设置为后视视图的子视图(或后代视图)。

根据对堆栈溢出的另一个问题的回答的说法,另一种解决方案是打开视图的层。

票数 2
EN

Stack Overflow用户

发布于 2011-05-29 02:35:11

快速思考--奇怪的地图偏移不是地图NSImage的意外部分吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6165615

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档