Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.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
Macos NSView边界在设置新原点后未更改_Macos_Cocoa_Positioning_Nsview_Zooming - Fatal编程技术网

Macos NSView边界在设置新原点后未更改

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

我有一个自定义的NSView,可以在放大事件中缩小或放大图像。但是,我注意到,即使在设置了新的边界大小和原点之后,似乎只有大小对显示的内容有影响:

边界原点似乎粘在左下角0,0,而我不希望它粘在左下角。我更新边界大小和原点将被覆盖-void放大WithEvent:

-(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启用了层备份,所以我需要更改根层对象的原点,然后更改视图和根层对象的边界大小。修正了。。。