Macos NSView边界在设置新原点后未更改
我有一个自定义的NSView,可以在放大事件中缩小或放大图像。但是,我注意到,即使在设置了新的边界大小和原点之后,似乎只有大小对显示的内容有影响: 边界原点似乎粘在左下角0,0,而我不希望它粘在左下角。我更新边界大小和原点将被覆盖-void放大WithEvent:Macos NSView边界在设置新原点后未更改,macos,cocoa,positioning,nsview,zooming,Macos,Cocoa,Positioning,Nsview,Zooming,我有一个自定义的NSView,可以在放大事件中缩小或放大图像。但是,我注意到,即使在设置了新的边界大小和原点之后,似乎只有大小对显示的内容有影响: 边界原点似乎粘在左下角0,0,而我不希望它粘在左下角。我更新边界大小和原点将被覆盖-void放大WithEvent: -(void)magnifyWithEvent:(NSEvent *)event { CGFloat zoomFactor = [event magnification] + 1.0; CGSize newSize
-(void)magnifyWithEvent:(NSEvent *)event {
CGFloat zoomFactor = [event magnification] + 1.0;
CGSize newSize = [self bounds].size;
newSize.width = newSize.width * zoomFactor;
newSize.height = newSize.height * zoomFactor;
[self setBoundsSize:newSize];
CGSize viewFrameSize = [self frame].size;
CGPoint newOrigin;
newOrigin.x = (viewFrameSize.width - newSize.width) / 2.0;
newOrigin.y = (viewFrameSize.height - newSize.height) / 2.0;
[self setBoundsOrigin:newOrigin];
[self setNeedsDisplay:YES];
}
控制台日志的打印输出显示边界原点正在更改:
2014-10-12 09:50:00.315 ZoomImageViewer[8047:303] Bounds origin x: 105.317268 y: 78.987951
2014-10-12 09:50:00.316 ZoomImageViewer[8047:303] Frame origin x: 0.000000 y: 0.000000
2014-10-12 09:50:00.333 ZoomImageViewer[8047:303] Bounds origin x: 106.124921 y: 79.593691
2014-10-12 09:50:00.333 ZoomImageViewer[8047:303] Frame origin x: 0.000000 y: 0.000000
2014-10-12 09:50:00.347 ZoomImageViewer[8047:303] Bounds origin x: 106.927730 y: 80.195798
2014-10-12 09:50:00.347 ZoomImageViewer[8047:303] Frame origin x: 0.000000 y: 0.000000
有没有办法让边界按照我的要求居中,或者我误解了它的工作原理?显示视图的-drawRect:implementation以及任何相关的帮助器方法。“你可能有正确的界限,但通过你如何画来有效地抵消这种变化。”肯特霍马斯,我发现了一个解决问题的方法。因为我为自定义NSView启用了层备份,所以我需要更改根层对象的原点,然后更改视图和根层对象的边界大小。修正了。。。