Ios 为什么在OSX中设置旋转变换时会调用drawRect?不应该';这不是硬件吗?
我注意到CALayers在OSX和iOS上对转换的响应方式之间有一个非常奇怪的差异。在iOS上,如果对UIView drawRect应用旋转变换而未调用,则视图将在硬件中进行变换并显示在屏幕上。在OSX上,如果将旋转变换应用于NSView,则每次都会调用drawRect。以下是我的NSView的代码: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];
- (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。我仍然不知道为什么当我使用层备份视图时,这种情况不会发生,所以如果有人对此有一些见解,我肯定很想听听。