首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不受NSAffineTransform影响的NSRect子视图

不受NSAffineTransform影响的NSRect子视图
EN

Stack Overflow用户
提问于 2013-02-08 01:16:21
回答 1查看 513关注 0票数 1

将NSAffineTransform旋转和平移应用于NSRect时,任何子视图都不受变换的影响。我已经包含了下面的代码。

代码语言:javascript
复制
- (void)drawRect:(NSRect)dirtyRect
    {

        NSAffineTransform * transform = [NSAffineTransform transform];
        [transform translateXBy:13.0 yBy:3.0];
        [transform rotateByDegrees:-45];
        [transform translateXBy:-13.0 yBy:3.0];
        [transform concat];


        NSImageView *imageViewWatchPointer;
        NSRect watchPointer = NSMakeRect(0, 0, 134, 49);
        imageViewWatchPointer = [[NSImageView alloc] initWithFrame:watchPointer];
        [imageViewWatchPointer setImageScaling:NSScaleNone];
        [imageViewWatchPointer setImage:[NSImage imageNamed:@"mastery_watch_pointer"]];
        [self addSubview:imageViewWatchPointer];

        [[NSColor blueColor] set];
        NSRectFill(watchPointer);  

    }
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-08 02:02:21

您并没有将transform应用于任何东西。你在创造它,然后把它扔掉。在任何情况下,您都不能在drawRect:中添加子视图。drawRect:用于自定义绘制当前视图,而不是用于管理视图层次结构。按照这种方式,每次重新绘制主视图时都会添加一个新的NSImageView

我建议回到Cocoa Drawing Guide来了解Cocoa绘图是如何工作的。

查看您的代码,我认为您根本不需要drawRect:。您只需要添加一个子视图,可能是在awakeFromNibinitWithFrame:中。我假设你想要旋转视图。要做到这一点,最简单的方法是给它一个支持层(setWantsLayer:),然后在层上设置affineTransform

或者,在drawRect:中,您可以旋转上下文,只绘制图像本身(不使用NSImageView)。有关如何进行自定义绘图的详细信息,请参阅Cocoa drawing Guide。

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

https://stackoverflow.com/questions/14757015

复制
相关文章

相似问题

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