Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/119.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么在OSX中设置旋转变换时会调用drawRect?不应该';这不是硬件吗?_Ios_Macos_Cocoa Touch_Cocoa_Calayer - Fatal编程技术网

Ios 为什么在OSX中设置旋转变换时会调用drawRect?不应该';这不是硬件吗?

Ios 为什么在OSX中设置旋转变换时会调用drawRect?不应该';这不是硬件吗?,ios,macos,cocoa-touch,cocoa,calayer,Ios,Macos,Cocoa Touch,Cocoa,Calayer,我注意到CALayers在OSX和iOS上对转换的响应方式之间有一个非常奇怪的差异。在iOS上,如果对UIView drawRect应用旋转变换而未调用,则视图将在硬件中进行变换并显示在屏幕上。在OSX上,如果将旋转变换应用于NSView,则每次都会调用drawRect。以下是我的NSView的代码: - (instancetype) initWithFrame:(NSRect)frameRect { self = [super initWithFrame:frameRect];

我注意到CALayers在OSX和iOS上对转换的响应方式之间有一个非常奇怪的差异。在iOS上,如果对UIView drawRect应用旋转变换而未调用,则视图将在硬件中进行变换并显示在屏幕上。在OSX上,如果将旋转变换应用于NSView,则每次都会调用drawRect。以下是我的NSView的代码:

- (instancetype) initWithFrame:(NSRect)frameRect
{
    self = [super initWithFrame:frameRect];
    if (self)
    {
        self.wantsLayer = YES;
        self.layerContentsRedrawPolicy = NSViewLayerContentsRedrawDuringViewResize;
    }

    return self;
}


- (void) drawRect:(NSRect)dirtyRect
{
    [[NSColor redColor] setFill];
    [[NSBezierPath bezierPathWithRect:dirtyRect] fill];
    NSLog(@"inside drawRect");
}

我的问题是为什么drawRect在OSX上被调用,而在iOS上却没有?我不希望在旋转期间调用它,因为我的绘图很昂贵。

因此我想出了一个部分解决方案,我可以使用层承载NSView而不是层支持NSView,然后在旋转转换期间不会调用drawRect。我仍然不知道为什么当我使用层备份视图时,这种情况不会发生,所以如果有人对此有一些见解,我肯定很想听听。